【问题标题】:Maintain the correct version for a COM dll referenced in a .NET project维护 .NET 项目中引用的 COM dll 的正确版本
【发布时间】:2010-09-07 16:42:31
【问题描述】:

我想在 .NET 项目中引用 COM DLL,但我还想确保创建的互操作 DLL 具有正确的版本(以便补丁知道何时必须更改 DLL)。

如果我使用 TlbImp,我可以使用 /asmversion 标志指定所需的版本,但是当我直接从 Visual Studio 添加它时,它会得到一个与原始 COM DLL 版本无关的版本。

我尝试更改 .vcproj 文件中的版本

<ItemGroup>
    <COMReference Include="MYDLLLib">
        <Guid>{459F8813-D74D-DEAD-BEEF-00CAFEBABEA5}</Guid>
        <!-- I changed this -->
        <VersionMajor>1</VersionMajor> 
        <!-- This too -->   
        <VersionMinor>0</VersionMinor> 
        <Lcid>0</Lcid>
        <WrapperTool>tlbimp</WrapperTool>
        <Isolated>False</Isolated>
    </COMReference>
</ItemGroup>

但随后项目未能构建并出现以下错误:

错误 CS0246:找不到类型或命名空间名称“MYDLLLib”(您是否缺少 using 指令或程序集引用?)

有什么方法可以在不使用TlbImp 预先创建我的所有 COM 引用的情况下完成此操作?

如果答案是,除了主要版本和次要版本之外,还有其他方法可以指定内部版本号吗? (例如 1.2.42.0)

【问题讨论】:

    标签: .net c++ com


    【解决方案1】:

    Guid 指的是 TypeLib 的 Guid 而不是 DLL 直接。版本号指的是 TypeLib 的版本,而不是 DLL。

    版本号将来自您的 idl 文件,我相信它只支持主要和次要版本,而不是构建版本。修改 typelib 时这个版本会变吗?

    版本号将出现在注册表中:

    HKEY_CLASSES_ROOT\Typelib\{typelib uuid}\Major.Minor
    

    如果次要版本设置为 0,那么我相信它会导入与主要版本匹配的“最新”版本,但主要版本必须设置为某个值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-02
      • 2010-10-08
      • 2017-05-25
      • 2020-12-01
      • 2017-09-29
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多