1

对不起这个可怕的标题。

我有一个签名的程序集“Signed.dll”,它是另一个程序集的依赖项,比如 Executable.exe。

Signed.dll 引用一个 COM DLL 并公开公开此 COM DLL 的一种类型:“ComPublicT”。

Executable.exe 必须引用签名项目中自动生成的 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 已签名,所以来自 Signed 的公开公开的 Interop.COM.dll 类型不会被编译器视为与来自 Executable 的 Interop.COM.dll 的公开公开的类型相同

Executable必须手动引用Signed的Interop.COM.dll,感觉很脆弱。

4

1 回答 1

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

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

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

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

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

于 2009-12-04T02:00:50.460 回答