COM DLL を参照する署名付きアセンブリ依存関係には、依存関係によって生成された相互運用アセンブリが参照される必要があります。
-
12-09-2019 - |
質問
ひどいタイトルですみません。
別のアセンブリ、たとえば Executable.exe の依存関係である署名付きアセンブリ 'Signed.dll' があります。
Signed.dll は COM DLL を参照し、この COM DLL の型の 1 つを公開します。「コムパブリックT」
Executable.exe は、元の COM DLL への参照を追加するのではなく、署名済みプロジェクトから自動的に生成された Interop.COM.dll を参照する必要があります。
このエラーは、2 つの異なる COM 相互運用アセンブリの 2 つの異なる ComPublicT 型間の型の不一致です。
これは、Signed.dll が署名されている場合にのみ必要です。
ComPublicT を模倣する型を作成する以外に、Executable が Signed の COM 相互運用アセンブリではなく COM DLL を参照できるようにするにはどうすればよいですか?
なぜこのようなことが起こるのでしょうか?
編集、これは少し異なる内訳です。
署名されたプロジェクト参照com.dll、およびcom.dllからタイプを公開しますVisual Studioにこのリファレンスを追加する
実行可能ファイルの参照と署名済みプロジェクトへの依存 通常、COM.dllへの参照を追加することができ、すべて順調です。
Signed は署名されているため、Signed から公開されている Interop.COM.dll 型は、コンパイラでは Executable の Interop.COM.dll から公開されている型と同じとみなされません。
実行可能ファイルは Signed の Interop.COM.dll を手動で参照する必要があり、脆弱に感じられます。
解決
署名付きアセンブリによって参照されるすべてのアセンブリも署名する必要があります。
通常、COM DLL の作成者によって提供される署名済みのプライマリ相互運用アセンブリ (PIA) が存在します。これは、.NET アセンブリによって参照される親 COM 型の唯一の相互運用アセンブリである必要があります。http://msdn.microsoft.com/en-us/library/aax7sdch.aspx 私の場合は利用できるPIAがありません。
私の 2 つのプロジェクト用に Visual Studio によって生成された 2 つの相互運用アセンブリは、一方の相互運用アセンブリが署名されており、もう一方が署名されていないという点で異なります。
したがって、相互運用アセンブリに含まれる型は異なります。
1 つの解決策は、両方のプロジェクトによって参照される単一の署名付き相互運用アセンブリを生成することです。