如何自动更新.NET项目COM引用?
我有一个遗留的VB6 COM DLL,它作为引用包含在.NET项目中。我的手动生成过程如下所示:如何自动更新.NET项目COM引用?,.net,com,build,msbuild-4.0,project-reference,.net,Com,Build,Msbuild 4.0,Project Reference,我有一个遗留的VB6 COM DLL,它作为引用包含在.NET项目中。我的手动生成过程如下所示: 构建VB6动态链接库 将VB6 DLL复制到引用目录 使用regsvr32 在.NET项目中,删除旧引用 添加对新VB6 DLL的引用(浏览) 将引用的隔离属性设置为True 构建.NET解决方案 我正在使这个过程自动化。步骤4到步骤6给我带来了麻烦。注册新的VB6 COM DLL时,.NET项目中的旧引用无效。通过查看项目文件,我看到: <ItemGroup> <COMRef
regsvr32
<ItemGroup>
<COMReference Include="DllName">
<Guid>{65CDCC83-E707-4AA3-8940-FE79F265D570}</Guid>
<VersionMajor>50</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>True</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
</ItemGroup>
{65CDCC83-E707-4AA3-8940-FE79F265D570}
50
0
0
tlbimp
真的
真的
我认为我需要使用COM的新clsid自动覆盖Guid
属性,并且我可能需要更改VersionMajor
和VersionMinor
属性
不幸的是,这些似乎不是VB6 COM DLL文件的属性。我在哪里可以获得这些信息和/或我是否走上了正确的道路?是否有一些工具或选项可以自动为我做到这一点
编辑
如果不更新引用,则生成错误为error
错误消息的实际文本为:
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(2580,9):错误MSB3179:隔离COM引用“DllName”时出现问题:未检测到此组件的注册类。[path/to/projfile.vbproj]
。。。其中“DllName”是我的DLL名称,“path/to/projfile.vbproj”是带有COM引用的项目文件的完全限定路径。我没有尝试过这一点,但您可以通过显式使用tlbimp生成互操作程序集来实现,而不是让Visual Studio通过向COM DLL添加引用来为您完成这一操作 比如:
我对Reg free COM没有太多经验,但也许您可以使用命令行工具手动生成清单,而不是设置隔离属性-例如,使用中描述的MT.EXE工具。我认为如果不使用vb6二进制兼容性选项,您无法解决此问题,因此guid保持稳定。@HansPassant-是,我现在将DLL设置为二进制兼容性,并且看到Guid和版本保持不变。但是,在生成解决方案时,我仍然收到MSB3179错误。错误消息的实际文本是什么?@HansPassant-我在问题的末尾添加了错误消息的全文。谢谢。听起来好像regsvr32.exe没有完成这项工作。您是否从提升的命令提示符运行它,以便它可以访问注册表?我一直在尝试。它在dev机器上工作,但在发布之后不工作(我使用的是ClickOnce)。使用您的方法,我不再在部署中使用免注册COM(这就是隔离属性所做的)。如果我自己在没有注册COM dll的情况下生成互操作,则隔离属性不可用。我想这就是答案,但我似乎无法让它工作。部分原因是对reg free COM缺乏了解。我让Visual Studio为我做所有的工作,这是在作弊