我想在.NET项目中引用COM DLL,但我还想确保创建的interop 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指令或程序集引用?)
有没有办法在不事先用TlbImp
创建所有COM引用的情况下完成此操作?
如果答案是是除了主要版本和次要版本之外还有办法指定内部版本号吗? (例如1.2。 42 .0)
答案 0 :(得分:1)
Guid直接引用TypeLib的Guid而不是DLL。版本号是指TypeLib的版本而不是DLL。
版本号将来自您的idl文件,我相信它只支持主要和次要版本,而不是构建版本。修改类型库时,此版本是否会更改?
版本号将显示在注册表中:
HKEY_CLASSES_ROOT\Typelib\{typelib uuid}\Major.Minor
如果次要版本设置为0,我相信它将导入与主要版本匹配的“最新”版本,但主要版本必须设置为某种类型。