2009-12-03 46 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为我的两个项目生成的两个互操作程序集的区别在于,一个互操作程序集是签名的,另一个是无符号的。

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

一个解决方案是生成一个由两个项目引用的单个签名互操作程序集。

相关问题