misc.log

日常茶飯事とお仕事と

テストアプリの配布をシミュレートする(3)

http://d.hatena.ne.jp/frontline/20051116/p2 の続き。

というわけで、まずはアセンブリに厳密名を付けてみよう。

sn -k test.snk

でキーペアを作成し、

sn -i test.snk CspContainer

でCSPコンテナに格納、ソースのAssemblyInfo.vb

<Assembly: System.Reflection.AssemblyKeyName("CspContainer")> 

という記述を追加してビルド....NG。エラー内容は...

アセンブリを作成できません : 参照されたアセンブリ 'Interop.ApliGLMem' は
厳密な名前を持っていません。

...だめじゃん。

この先、実はApliGL以外にもVB6.0での利用を想定したライブラリをコアな部分で使うことが決まっているので、これで挫折するわけにはいかない。調べてみると、こんなページが見つかった。
http://www.microsoft.com/japan/msdn/EnterpriseServices/general/esfaq.asp#12.1
抜粋させてもらうと

サービス コンポーネントは厳密名を持たなくてはなりません。このため、COM オブジェクトのための相互運用アセンブリも厳密名を
持っている必要があります。 Visual Studio に相互運用アセンブリのための厳密名を生成させるためには、プロジェクトの [全般]
 プロパティの [ActiveX/COM オブジェクトのラッパー アセンブリ] または [ラッパー アセンブリ キー ファイル] に、キー ファイル
へのパスを設定します。

多数のプロジェクトで使用する COM オブジェクト (COM+ Admin SDK オブジェクトなど) では、tlbimp.exe を使って相互運用
アセンブリを生成します。次の例では、\Windows\System32\Com にある COM+ Admin SDK (comadmin.dll) 
のための相互運用アセンブリを生成しています。

キーファイルを作成します。 
sn /k comadmin.snk

tlbimp で、キーファイルを使って相互運用アセンブリを作成します。
tlbimp comadmin.dll /keyfile:comadmin.snk /out:interop.comadmin.dll /namespace:comadmin

だそうな。Visual Studioのプロジェクト「全般」プロパティに何かあると書いてあるが、見あたらないのでコマンドラインの方法を試す。

tlbimp ApliGLMem65.exe /keycontainer:CspContainer /out:interop.ApliGLMem.dll

とやってみたところ、無事ファイルができた。次はこれを使って本体のビルド。