抱歉这个可怕的标题。

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

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

Executable.exe 必须引用从 Signed 项目自动生成的 Interop.COM.dll,而不是添加对原始 COM DLL 的引用。

该错误是来自两个不同 COM 互操作程序集的两个不同 ComPublicT 类型之间的类型不匹配。

仅当 Signed.dll 已签名时才需要此操作。

除了创建模仿 ComPublicT 的类型之外,如何允许可执行文件引用 COM DLL 而不是 Signed 的 COM 互操作程序集?

为什么会出现这种情况?

编辑,这是一个有些不同的细分:

签名的项目参考com.dll,并公开露出com.dll的类型

可执行的引用和取决于签名的项目通常您可以向com.dll添加引用,一切都很好。

由于 Signed 已签名,因此编译器不会将 Signed 中公开公开的 Interop.COM.dll 类型视为与可执行文件的 Interop.COM.dll 中公开公开的类型相同

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

有帮助吗?

解决方案

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top