维护.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,那么我相信它将导入与主版本匹配的"最新"版本,但是必须将主版本设置为某些值。