- - PR -
【VB.NET】COMラッパーアセンブリに厳密名で署名
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-12-27 11:35
こんにちは。いつも参考にさせて頂いてます。
現在、Excel2000を参照設定に含むクラスライブラリを作成しているのですが 下記の問題をどうしても解決できずにいます。 AssemblyInfo.vb 内に AssemblyKeyFile を使用してこのクラスライブラリのアセンブリに対して 厳密名で署名しようとしたところ参照元記事とほぼ同じようなビルドエラーが発生しました。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19480&forum=7 プロジェクトが C# の場合には上記の記事のやり方でCOMラッパーアセンブリに対して 厳密名で署名できることを確認したのですが、VB.NETで同じようなことをする方法がわかりません。 VB.NETで作成されたプロジェクトのプロパティには「ActiveX/COM オブジェクトのラッパーアセンブリ」 という項目がありませんでした。 いろいろ調べてみたのですが、なかなか情報にたどり着けないでいます。 VB.NETではできない or 他に特別な方法があるのでしょうか? ご存知の方いらっしゃいましたら、ご教授いただけますでしょうか。 【環境】 Windowsアプリ(VB.NET) IDE: VS.NET2003 OS: Win2000 |
|
投稿日時: 2005-12-27 12:55
こんにちは。
VB.NETは扱ったことがないのでIDEからの操作方法はわかりませんが、.NET Framework SDKに含まれている(VS.NET2003にも当然入っている)aximp.exeを利用すると、署名付きのラッパーを作成することができます。 参考リンク http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cptools/html/cpgrfwindowsformsactivexcontrolimporteraximpexe.asp これで作ったラッパーを参照設定すれば、対象のプロジェクトも署名できるようになるかと思います。 |
|
投稿日時: 2005-12-27 14:41
noderaさん、回答ありがとうございます。
当方でもあれからさらに調べてみましたところ、タイプ ライブラリ インポータ (Tlbimp.exe) というものを見つけました。 リンク http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cptools/html/cpgrftypelibraryimportertlbimpexe.asp 教えていただいた aximp.exe と似たような感じ??もするのですが、 ExcelのCOMタイプライブラリが ActiveX コントロールに該当するのかどうかいまいちよくわかっていません。。。 いずれにしてもコマンドラインからこれらのツールを実行して、
に対して署名をするという方針で考えていけばいいでしょうか? ちなみに、現在7人のチームで開発を行っているので 全員がこの作業をやらなければいけないですよね? バッチファイルを書いて配布すればいいですかね(^^;) |
|
投稿日時: 2005-12-27 15:37
こんにちは。
最初の書き込みの参照URLを見ていたために、ついつい画面に張り付けるActiveXと勘違いしてしまいました。タイプ ライブラリ インポータ (Tlbimp.exe)を私は利用したことがありませんが、たぶん同じようにいけるのではないかと思います。 >ちなみに、現在7人のチームで開発を行っているので >全員がこの作業をやらなければいけないですよね? だれか一人が作成した署名つきラッパーDLLを開発者に配布すればいいと思います。 7人が別々に署名用のキー作って作業する必要はありませんよね? |
|
投稿日時: 2005-12-27 22:27
返答が遅くなってしまいましたが、タイプライブラリインポータを使った方法でうまくいきました!
以下、今回試した手順です。 1.コマンドプロンプトから tlbimp.exe を実行して厳密名つきの相互運用アセンブリを作成する。 (一例です) >tlbimp "C:\\Program Files\\Microsoft Office\\Office\\Excel9.olb" /keyfile:hogehoge.snk /out:Excel.dll この結果、 Excel.dll Office.dll VBIDE.dll の3つの相互運用アセンブリが作成される。 2.クラスライブラリの参照設定から今までの Excel2000 の参照をはずし、1で作成した相互運用アセンブリを参照する。 これでExcel2000を参照している場合に「Interop.Excelは厳密名を持ってない!」と怒られることがなくなりました。 以下、参考にしたURLです。 .NET からの COM コンポーネントの呼び出し http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdndotnet/htm/callcom.asp Office 2003 プライマリ相互運用機能アセンブリをインストールして使用する http://www.microsoft.com/japan/msdn/office/office2003/OfficePrimaryInteropAssembliesFAQ.asp プライマリ相互運用アセンブリ (PIA) http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdndotnet/htm/whypriinterop.asp?frame=true OfficeXP および Office2003 の場合は、完全インストールをするとプライマリ相互運用アセンブリが GACにすでに登録されていて、普通はこちらを参照設定するんですね。 (今までExcel2000でしかやってこなかったので、この仕組みがわからなかったんですが。。。) Office2000 のPIAもあるかな?と思って探してみましたがさすがに無いようです。 なので仕方なく、今回自分のキーファイルを使って署名を行いました。 作成した相互運用アセンブリを開発メンバーに配布して使用しています。 noderaさん、ありがとうございました。 |
1