2008-09-03 83 views
1

我想引用.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)

回答

1

Guid指的是TypeLib的Guid而不是直接指向DLL。版本号是指TypeLib的版本而不是DLL。

版本号将来自您的idl文件,我相信它只支持主版本和次版本,而不是版本版本。当你修改typelib时,这个版本是否改变?

的版本号将出现在注册表中:

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

如果次要版本设置为0,那么我相信这将导入相匹配的主要版本的“最新”版本,但主要版本必须设置为某些东西。