用于代码生成的Visual Studio自定义工具...如何找出问题所在?

Rob*_*ser 5 code-generation visual-studio-2010 customtool visual-studio visual-studio-2010-sp1

我正在尝试在Visual Studio 2010中创建用于代码生成的自定义工具.首先我注册它:

"$(FrameworkSDKDir)Bin\NETFX 4.0 Tools\gacutil.exe" /if "$(TargetPath)"
Run Code Online (Sandbox Code Playgroud)

然后我通过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"
Run Code Online (Sandbox Code Playgroud)

然后visual studio说:

Cannot find custom tool 'MapBuildTool' on this system.
Run Code Online (Sandbox Code Playgroud)

好的......现在怎么样?它找不到自定义工具注册表项吗?它是否找到了钥匙,但装卸组件有困难?它是否加载了程序集但是在实例化类时遇到了麻烦......?哪些日志/地方在那里我可以找出哪些错误?

har*_*333 12

我用昨天写的自定义工具遇到了这个问题.非常令人沮丧.reg文件是正确的,自定义工具在Experimental Hive中完美运行.但它只是拒绝在常规的VisualStudio中运行.

我猜测VisualStudio读取注册表,然后在某处缓存注册表的各个部分.

执行以下操作似乎重置此缓存

devenv /setup
Run Code Online (Sandbox Code Playgroud)

执行此操作后,我的自定义工具完美运行.


Edw*_*rey 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>"=""
Run Code Online (Sandbox Code Playgroud)

选项2:

我不确定这一点,但我认为你可以创建一个合适的VS2010软件包(说明),它将负责注册可执行文件的位置.

对于这两个选项,都不需要gacutil,tlbexp和regasm.在查找DLL时,VS2010会做自己的事情.


Lao*_*jin 0

也许为时已晚,但是:在 VS.NET 中编写自定义工具
您可能跳过了以下步骤之一:

为 COM 互操作注册您的生成器

您必须生成 GUID 并使用 tlbexp.exe 和 regasm.exe。我假设您必须使用这些工具,而不是将生成器放入 GAC 中。