我想在 .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 指令或程序集引用?)

有没有办法在不创建所有 COM 引用的情况下完成此操作 TlbImp 提前?

如果答案是 是的 除了主要版本和次要版本之外,还有没有办法指定内部版本号?(例如 1.2.42.0)

有帮助吗?

解决方案

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top