对于可怕的头衔感到抱歉。
我有一个已签名的程序集“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,它感觉很脆弱。
答案 0 :(得分:0)
签名程序集引用的每个程序集也必须签名。
通常,COM DLL的作者提供了一个签名的主互操作程序集(PIA)。它应该是任何.NET程序集引用的父COM类型的唯一互操作程序集。 http://msdn.microsoft.com/en-us/library/aax7sdch.aspx 在我的案例中没有可用的PIA。
Visual Studio为我的两个项目生成的两个互操作程序集的不同之处在于,一个互操作程序集已签名,另一个是未签名的。
因此,互操作程序集中包含的类型不同。
一种解决方案是生成由两个项目引用的单个签名互操作程序集。