.net - 维护 .NET 项目中引用的 COM dll 的正确版本

标签 .net c++ com

我想在 .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>

但随后项目构建失败并出现以下错误:

error CS0246: The type or namespace name 'MYDLLLib' could not be found (are you missing a using directive or an assembly reference?)

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

如果答案是,除了主要版本和次要版本之外,是否可以指定内部版本号? (例如 1.2.42.0)

最佳答案

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

版本号将来自您的 idl 文件,我相信它只支持主要和次要版本,而不支持构建版本。当您修改类型库时,此版本是否会发生变化?

版本号将出现在注册表中的以下位置:

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

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

关于.net - 维护 .NET 项目中引用的 COM dll 的正确版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41832/

相关文章:

c# - Azure AD B2C 自定义策略,保护 API 连接器

c# - 在 .Net framework 2.0 中使用 .Net framework 3.5 功能

c# - 用于自定义项目的 C DLL

C++ 如果一个线程写入后切换一个 bool 值,那么在另一个线程的循环中读取该 bool 值是否安全?

c++ - 如何在 C++ 中将 Windows DATE 转换为 Unix 时间

c# - 使用 openSSL 生成自签名 RSA-2048-SHA-256 证书 PFX 文件

c# - POCO 和 'Value Object' 之间的唯一区别是 POCO 目标 .Net 吗?

c++ - 在 Windows 上编译/执行汇编程序的最简单方法?

c - 如何使用IPictureDisp::Invoke正确调用Render成员

c++ - 如何生成 64 位 COM 代理