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)
执行此操作后,我的自定义工具完美运行.
要调试:
运行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会做自己的事情.
也许为时已晚,但是:在 VS.NET 中编写自定义工具
您可能跳过了以下步骤之一:
为 COM 互操作注册您的生成器
您必须生成 GUID 并使用 tlbexp.exe 和 regasm.exe。我假设您必须使用这些工具,而不是将生成器放入 GAC 中。
归档时间: |
|
查看次数: |
5076 次 |
最近记录: |