1

ひどいタイトルでごめんなさい。

Executable.exe などの別のアセンブリの依存関係である署名済みアセンブリ 'Signed.dll' があります。

Signed.dll は COM DLL を参照し、この COM DLL の型の 1 つ「ComPublicT」を公開します。

Executable.exe は、元の COM DLL への参照を追加するのではなく、Signed プロジェクトから自動的に生成された Interop.COM.dll を参照する必要があります。

エラーは、2 つの異なる COM 相互運用アセンブリの 2 つの異なる ComPublicT 型の間で型が一致しないことです。

これは、Signed.dll が署名されている場合にのみ必要です。

ComPublicT を模倣する型を作成する以外に、Executable が Signed の COM 相互運用アセンブリではなく COM DLL を参照できるようにするにはどうすればよいですか?

なぜこれが起こるのですか?

編集、これは多少異なる内訳です:

署名されたプロジェクトは COM.dll を参照し、COM.dll から型をパブリックに公開します。この参照を Visual Studio に追加すると、自動的に Interop.COM.dll が作成されます。

実行可能参照と署名済みプロジェクトに依存 通常、COM.dll への参照を追加でき、すべて問題ありません。

Signed は署名されているため、Signed から公開されている Interop.COM.dll の型は、コンパイラからは Executable の Interop.COM.dll から公開されている型と同じには見えません。

実行可能ファイルは、脆弱に感じられる Signed の Interop.COM.dll を手動で参照する必要があります。

4

1 に答える 1

0
  1. 署名済みアセンブリによって参照されるすべてのアセンブリも署名する必要があります。

  2. 通常、COM DLL の作成者によって提供される、署名済みの Primary Interop Assembly (PIA) があります。これは、任意の .NET アセンブリによって参照される親 COM 型の唯一の相互運用アセンブリである必要があります。 http://msdn.microsoft.com/en-us/library/aax7sdch.aspx 私の場合、利用可能な PIA はありません。

私の 2 つのプロジェクト用に Visual Studio によって生成された 2 つの相互運用アセンブリは、一方の相互運用アセンブリが署名され、もう一方が署名されていないという点で異なります。

したがって、相互運用アセンブリに含まれる型は異なります。

1 つの解決策は、両方のプロジェクトで参照される単一の署名済み相互運用機能アセンブリを生成することです。

于 2009-12-04T02:00:50.460 に答える