【发布时间】: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