维护.NET项目中引用的COM DLL的正确版本
问题描述:
我想引用.NET项目中的COM DLL,但我也想确保所创建的interop DLL将具有正确的版本补丁将知道何时必须更改DLL)。维护.NET项目中引用的COM 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?)
有没有什么办法让这个不创建全部完成我的COM提前预订了TlbImp
?
如果答案是是的除了主版本和次版本之外,还有一种方法可以指定版本号吗? (例如1.2..0)
答
Guid指的是TypeLib的Guid而不是直接指向DLL。版本号是指TypeLib的版本而不是DLL。
版本号将来自您的idl文件,我相信它只支持主版本和次版本,而不是版本版本。当你修改typelib时,这个版本是否改变?
的版本号将出现在注册表中:
HKEY_CLASSES_ROOT\Typelib\{typelib uuid}\Major.Minor
如果次要版本设置为0,那么我相信这将导入相匹配的主要版本的“最新”版本,但主要版本必须设置为某些东西。