【问题标题】:Signed assembly dependency that references a COM DLL must have the dependency's generated interop assembly referenced引用 COM DLL 的签名程序集依赖项必须引用依赖项生成的互操作程序集
【发布时间】:2010-12-23 01:06:46
【问题描述】:

对不起这个糟糕的标题。

我有一个签名的程序集“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 是已签名的,所以来自 Signed 的公开公开的 Interop.COM.dll 类型不会被编译器视为与来自 Executable 的 Interop.COM.dll 的公开公开的类型相同

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

【问题讨论】:

  • 您如何生成 Signed.dll 使用的互操作?由于 Signed.dll 是经过签名的,因此您必须手动完成,以便提供 .snk 密钥文件。
  • 在 Visual Studio 中向项目添加 COM 引用时会自动生成 COM 互操作程序集。 COM.dll 生成 Interop.COM.dll 并放在 obj 和 bin 文件夹中。
  • 问题是生成的Interop程序集不会被med签名:(

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


【解决方案1】:
  1. 签名程序集引用的每个程序集也必须签名。

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-01-10
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多