2008-09-03 79 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,那麼我相信這將導入相匹配的主要版本的「最新」版本,但主要版本必須設置爲某些東西。