今までHiveモードで動かしていたけれども、みんなに使ってもらうためにはパラメータなしのVSで利用できる必要があります。
そこで、Hiveモードのレジストリを真似てコピーしてみたけど…ダメOrz

ネットを調べまわる参考になったのが

Writing a custom tool to generate code for Visual Studio .NET – drewnoakes.com
Register your Generator for COM interop

Visual Studio will communicate with your custom tool using COM, though you may still write the tool using managed code. Your custom tool assembly must be registered for COM interop.

First, extract a type libarary (.tlb file) using tlbexp.exe

tlbexp MyCustomTool.dll

…this creates MyCustomTool.tlb. Next, register your assembly for COM interop using regasm.exe

regasm /codebase MyCustomTool.dll

If you haven’t signed your assembly with a strong name, you’ll receive a warning message at this point. Your tool will work either way, though signing does solve other problems. Strong names are managed using sn.exe.

とのこと、まずはVisual Studio ToolsからVisual Studioコマンドプロンプトを起動

C:Program FilesMicrosoft Visual Studio 8VC>tlbexp C:workspaceMessageGeneratorMessageGeneratorbinDebugKurusugawa.MessageGenerator.dll
Microsoft (R) .NET Framework Assembly to Type Library Converter 2.0.50727.42
Copyright (C) Microsoft Corporation.  All rights reserved.

Assembly exported to 'C:Program FilesMicrosoft Visual Studio 8VCKurusugawa.MessageGenerator.tlb'

どうやら成功らしい。次にregasmでレジストリ登録

C:Program FilesMicrosoft Visual Studio 8VC>regasm /codebase C:[省略]Kurusugawa.MessageGenerator.dll
Microsoft(R) .NET Framework Assembly Registration Utility 2.0.50727.42
Copyright (C) Microsoft Corporation 1998-2004.  All rights reserved.

RegAsm : warning RA0000 : 署名されていないアセンブリを /codebase を使用して登録すると、同じコンピュータにインストールされるその他のアプリケーションとの競合が生じる可能性があります。/codebase スイッチは署名されたアセンブリのみに使用できます。アセンブリに厳密な名前を付けて、再登録してください。
RegAsm : warning RA0000 : 型は何も登録されませんでした。

ダメっぽい。どうやら署名が必要との事で署名をしてみる。プロジェクトのプロパティ→署名。
ビルド後、再度実行。

C:Program FilesMicrosoft Visual Studio 8VC>regasm /codebase C:[省略]Kurusugawa.MessageGenerator.dll
Microsoft(R) .NET Framework Assembly Registration Utility 2.0.50727.42
Copyright (C) Microsoft Corporation 1998-2004.  All rights reserved.

RegAsm : warning RA0000 : 型は何も登録されませんでした。

厳密名はOKだけれども、何も登録されない…、調べてみたところCOMとしての公開設定が必要らしい。
これまた調べてみると、プロジェクトのプロパティ→アプリケーション→アセンブリ情報→アセンブリをCOM参照可能にする
のチェックボックスが必要とのこと。チェックをいれてリビルド。再度、regasm

C:Program FilesMicrosoft Visual Studio 8VC>regasm /codebase C:[省略]Kurusugawa.MessageGenerator.dll
Microsoft(R) .NET Framework Assembly Registration Utility 2.0.50727.42
Copyright (C) Microsoft Corporation 1998-2004.  All rights reserved.

型は正常に登録されました。

他にも、tlbが何のために必要なのかイマイチ不明。。やらなくてもいけるのかな?
また、gacutil /i ***.dllのような方法が書かれてるサイトもあった。。


3件のコメント

koreyasu · 2008-03-05 01:11

gacutil /i を利用してインストールを行っていたが、一部エラーが出る端末が合った。

Failure adding assembly to the cache: Unknown Error

ネットを調べてみたら、どうもバージョンが合ってないとエラーがでるらしい。VSコマンドプロンプトから環境変数を調べてみたら…
インストールできた端末
 FrameworkVersion=v2.0.50727
インストールできなかった端末
 FrameworkVersion=v1.0.3705
コンパイルした端末
 FrameworkVersion=v2.0.50727
なるほどね。

koreyasu · 2008-03-05 01:29

gacutil /i だけじゃダメなのは確認・・・
しまったなぁ、、全端末でこれやった後に、動作しない事を確認してしまった。。。
gacutil /u を行ってからregasm試してみます。
と思ったら、/uしても何もアンインストールされず。。。

tlbexpからやり直しても、プロジェクトを分けたからかわからないけど…

TlbExp : warning TX0000 : タイプ ライブラリ エクスポータ警告: 参照型がマネージコンポーネントで定義されていますが、この参照型は、登録されていなかったために読み込めなかったタイプ ライブラリからインポートされています (型: ‘Microsoft.VisualStudio.OLE.Interop.IObjectWithSite’、コンポーネント: ‘C:WINDOWSassemblyGACMicrosoft.VisualStudio.OLE.Interop7.1.40304.0__b03f5f7f11d50a3aMicrosoft.VisualStu
dio.OLE.Interop.dll’)。
Assembly exported to ‘C:tempgeneratorKurusugawa.BinaryAccessGenerator.tlb’

とのエラーが

koreyasu · 2008-03-05 01:45

上記URLにレジストリを登録するなんて項目があったOrz
結局手でやってるのかよ…。
もっと良い方法があると思うんだけど、とりあえず時間がないから、これでいくかぁ。。。

コメントを残す

メールアドレスが公開されることはありません。