引用COM DLL的已签名程序集依赖项必须引用依赖项生成的interop程序集

时间:2009-12-03 22:41:35

标签: .net visual-studio com interop signed-assembly

对于可怕的头衔感到抱歉。

我有一个已签名的程序集“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的引用,一切都很好。

因为签名已签名,编译器看不到来自Signed的公开暴露的Interop.COM.dll类型与来自可执行文件的Interop.COM.dll的公开暴露类型相同

可执行文件必须手动引用Signed的Interop.COM.dll,它感觉很脆弱。

1 个答案:

答案 0 :(得分:0)

  1. 签名程序集引用的每个程序集也必须签名。

  2. 通常,COM DLL的作者提供了一个签名的主互操作程序集(PIA)。它应该是任何.NET程序集引用的父COM类型的唯一互操作程序集。 http://msdn.microsoft.com/en-us/library/aax7sdch.aspx 在我的案例中没有可用的PIA。

  3. Visual Studio为我的两个项目生成的两个互操作程序集的不同之处在于,一个互操作程序集已签名,另一个是未签名的。

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

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