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

时间:2011-10-19 23:41:27

标签: visual-studio visual-studio-2010 code-generation visual-studio-2010-sp1 customtool

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

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

然后我通过注册码添加它:

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

3 个答案:

答案 0 :(得分:12)

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

我猜测VisualStudio会读取注册表,然后在某处缓存注册表中的内容。

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

devenv /setup

执行此操作后,我的自定义工具运行良好。

答案 1 :(得分: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。在查找DLL时,VS2010会做自己的事情。

答案 2 :(得分:0)

也许为时已晚:Writing a custom tool in VS.NET
您可能跳过了以下步骤之一:

  

为COM互操作注册您的Generator

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