5

Visual Studio 2010 でコード生成用のカスタム ツールを作成しようとしています。最初に登録します。

"$(FrameworkSDKDir)Bin\NETFX 4.0 Tools\gacutil.exe" /if "$(TargetPath)"

次に、reg キーを介して追加します。

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\CLSID\{6A96476E-74F3-4AB3-9CCA-F15EC6104D84}]
"RuntimeVersion"="v4.0.30319"
"Class"="MapBuildTool.MapFileGenerator"
"Assembly"="MapBuildTool, Version=1.0.0.0, Culture=en-US, PublicKeyToken=7d8abca94a1e38ae"
"ThreadingModel"="Both"
"InprocServer32"="C:\\Windows\\SysWOW64\\mscoree.dll"
@="MapBuildTool"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Generators\{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}\MapBuildTool]
"CLSID"="{6A96476E-74F3-4AB3-9CCA-F15EC6104D84}"
"GeneratesDesignTimeSource"=dword:00000001
@="MapBuildTool"

そして、ビジュアルスタジオは次のように述べています。

Cannot find custom tool 'MapBuildTool' on this system.

わかりました...さてどうしますか?カスタム ツールのレジストリ キーが見つかりませんでしたか? キーは見つかりましたが、アセンブリの読み込みに問題がありましたか? アセンブリをロードしましたが、クラスのインスタンス化に問題がありましたか? 何が問題なのかを調べるために参照できるログ/場所は何ですか?

4

3 に答える 3

13

昨日書いたカスタムツールでこの問題に遭遇しました。非常にイライラします。reg ファイルは正しく、custom-tool は Experimental Hive で完全に実行されました。しかし、通常の VisualStudio での実行は単に拒否されました。

私は、VisualStudio がレジストリを読み取り、レジストリの一部をどこかにキャッシュしていると推測しています。

次のコマンドを実行すると、このキャッシュがリセットされます

devenv /setup

これを実行した後、私のカスタムツールは完全に機能しました。

于 2013-08-08T19:43:16.300 に答える
6

デバッグするには:

Process Monitorを実行して、VS2010/COM/.NET/Fusion アセンブリをロードする悪夢をリバース エンジニアリングし、VS が選択したレジストリ エントリと、検索しようとしても NOTFOUND で失敗したエントリを調べます。

うまくいけば、デバッグせずに修正するには:

オプション1:

バインディング パスを追加します。

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\BindingPaths\<A new GUID>]
"<Path the the folder containing your DLL>"=""

オプション 2:

これについてはよくわかりませんが、実行可能ファイルの場所を登録する適切な VS2010 パッケージ ( instructions )を作成できると思います。

どちらのオプションでも、gacutil、tlbexp、regasm は必要ありません。VS2010 は、DLL を見つけるときに独自の処理を行います。

于 2012-02-27T17:42:55.553 に答える
0

遅すぎるかもしれませんが: VS.NET でカスタム ツールを作成
する 次の手順のいずれかをスキップした可能性があります。

Generator for COM 相互運用を登録する

GUID を生成し、tlbexp.exe と regasm.exe を使用する必要があります。ジェネレーターを GAC に配置する代わりに、これらのツールを使用する必要があると思います。

于 2011-12-12T14:50:50.380 に答える