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

时间:2020-03-05 18:47:04  来源:igfitidea点击:

我想在.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文件,我相信它仅支持主要版本和次要版本,而不支持构建版本。修改typelib时,此版本会更改吗?

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

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

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