2009-12-03 51 views
1

對於可怕的標題感到抱歉。引用COM DLL的簽名程序集依賴項必須具有依賴項生成的interop程序集,引用爲

我有一個簽名的程序集'Signed.dll',它是另一個程序集的依賴項,比如Executable.exe。

Signed.dll引用一個COM DLL並公開地公開這個COM DLL的類型之一:'ComPublicT。'

Executable.exe必須從Signed項目引用自動生成的Interop.COM.dll,而不是添加對原始COM DLL的引用。

錯誤是來自兩個不同COM互操作程序集的兩個不同ComPublicT類型之間的類型不匹配。

這僅在Signed.dll簽名時才需要。

除了創建一個模仿ComPublicT的類型之外,我如何允許Executable引用COM DLL而不是Signed的COM互操作程序集呢?

爲什麼會發生這種情況?

編輯,這裏是一個略微不同的細分:

簽署的項目引用COM.dll,並公開曝光從COM.dll 類型添加自動創建在Visual Studio這基準Interop.COM.dll

可執行引用和取決於已簽名的項目 通常,您可以添加對COM.dll的引用,並且一切正常。

由於簽名被簽名,從簽名的公開暴露Interop.COM.dll類型不被編譯器視爲與從可執行的Interop.COM.dll

可執行的公開裸露型必須手動參考簽名的Interop.COM.dll,感覺很脆弱。

+0

你如何生成Signed.dll使用的互操作?由於Signed.dll已被簽名,因此您必須手動完成此操作,以便您可以提供.snk密鑰文件。 – 2009-12-03 23:10:01

+0

當您向Visual Studio中的項目添加COM引用時,將自動生成COM互操作程序集。 COM.dll生成Interop.COM。DLL並放置在obj和bin文件夾中。 – 2009-12-03 23:30:38

+1

問題是生成的Interop程序集不會醫學簽名:( – NPehrsson 2010-12-27 12:51:25

回答

0
  1. 簽名程序集引用的每個程序集也必須簽名。

  2. 通常,由COM DLL的作者提供了一個簽名的主互操作程序集(PIA)。它應該是其任何.NET程序集引用的父COM類型的唯一互操作程序集。 http://msdn.microsoft.com/en-us/library/aax7sdch.aspx 我的情況沒有PIA可用。

Visual Studio爲我的兩個項目生成的兩個互操作程序集的區別在於,一個互操作程序集是簽名的,另一個是無符號的。

因此,互操作程序集中包含的類型不同。

一個解決方案是生成一個由兩個項目引用的單個簽名互操作程序集。

相關問題