- PR -

【VB.NET】COMラッパーアセンブリに厳密名で署名

1
投稿者投稿内容
takacini
常連さん
会議室デビュー日: 2005/12/27
投稿数: 24
お住まい・勤務地: 東京都
投稿日時: 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
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 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

これで作ったラッパーを参照設定すれば、対象のプロジェクトも署名できるようになるかと思います。
takacini
常連さん
会議室デビュー日: 2005/12/27
投稿数: 24
お住まい・勤務地: 東京都
投稿日時: 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 コントロールに該当するのかどうかいまいちよくわかっていません。。。

いずれにしてもコマンドラインからこれらのツールを実行して、

  • Interop.Excel.dll
  • Interop.Office.dll
  • Interop.VBIDE.dll

に対して署名をするという方針で考えていけばいいでしょうか?

ちなみに、現在7人のチームで開発を行っているので
全員がこの作業をやらなければいけないですよね?
バッチファイルを書いて配布すればいいですかね(^^;)
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2005-12-27 15:37
こんにちは。

最初の書き込みの参照URLを見ていたために、ついつい画面に張り付けるActiveXと勘違いしてしまいました。タイプ ライブラリ インポータ (Tlbimp.exe)を私は利用したことがありませんが、たぶん同じようにいけるのではないかと思います。

>ちなみに、現在7人のチームで開発を行っているので
>全員がこの作業をやらなければいけないですよね?

だれか一人が作成した署名つきラッパーDLLを開発者に配布すればいいと思います。
7人が別々に署名用のキー作って作業する必要はありませんよね?

takacini
常連さん
会議室デビュー日: 2005/12/27
投稿数: 24
お住まい・勤務地: 東京都
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)