我想在.NET项目中引用COM DLL,但我还想确保创建的互操作DLL具有正确的版本(以便补丁程序知道何时必须更改DLL)。
如果使用TlbImp,则可以使用/asmversion标志指定所需的版本,但是当我直接从Visual Studio添加它时,它将获得与原始COM DLL的版本无关的版本。
我尝试更改.vcproj文件中的版本
1 2 3 4 5 6 7 8 9 10 11 12
| <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时,此版本会更改吗?
版本号将出现在注册表下:
1
| HKEY_CLASSES_ROOT\\Typelib\\{typelib uuid}\\Major.Minor |
如果次要版本设置为0,那么我相信它将导入与主版本匹配的"最新"版本,但是必须将主版本设置为某些版本。