0

我有一个旧版 VB6 COM DLL,它作为参考包含在 .NET 项目中。我的手动构建过程如下所示:

  1. 构建 VB6 DLL
  2. 将 VB6 DLL 复制到参考目录
  3. 注册 VB6 DLLregsvr32
  4. 在 .NET 项目中,删除旧的引用
  5. 添加对新 VB6 DLL 的引用(浏览)
  6. 将引用的独立属性设置为 True
  7. 构建 .NET 解决方案

我正在自动化这个过程。步骤 4 到 6 给我带来了麻烦。当我注册新的 VB6 COM DLL 时,.NET 项目中的旧引用无效。通过查看项目文件,我看到了这一点:

<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>

我相信我需要Guid用 COM 的新 clsid 自动覆盖该属性,并且我可能需要更改VersionMajorVersionMinor属性。

不幸的是,这些似乎不是 VB6 COM DLL 文件的属性。我在哪里可以获得这些信息和/或我什至走在正确的道路上?是否有一些工具或选项可以自动为我执行此操作?

编辑

如果我不更新引用,我得到的构建错误是 error MSB3179

错误消息的实际文本是:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(2580,9):错误 MSB3179:隔离 COM 引用“DllName”时出现问题:未检测到此组件的注册类。[路径/到/projfile.vbproj]

...其中“DllName”是我的 DLL 名称,“path/to/projfile.vbproj”是带有 COM 引用的项目文件的完全限定路径。

4

1 回答 1

0

我没有尝试过,但您可以通过使用 tlbimp 显式生成互操作程序集来实现此目的,而不是让 Visual Studio 通过添加对 COM DLL 的引用来为您完成此操作。

就像是:

  1. 构建 VB6 DLL
  2. 将 VB6 DLL 复制到参考目录
  3. 运行 tlbimp(例如从批处理文件)以在参考目录中生成互操作程序集。
  4. .NET 项目应该在步骤 3 中具有对互操作程序集输出的引用。
  5. 构建 .NET 解决方案

使用你的方法,我不再使用免注册 COM

我对无注册 COM 没有太多经验,但也许您可以使用命令行工具手动生成清单,而不是设置独立属性 - 例如使用此答案中描述的 MT.EXE 工具。

于 2012-05-23T20:19:52.700 回答