1

MEFのコンポジションコンテナとディレクトリカタログで奇妙な問題が発生し、アセンブリを含むフォルダへのフルパスを渡します。

C:\ Program Files \ MyCompany \ MyApp \ Bin

AssemblyA:ExportedTypeA、ExportedTypeB

AssemblyB:BaseExportedTypeA、BaseExportedTypeB

別の場所(C:\ users \ Me \ dev \ project \ foo \ bar \ bar2 \ bin \ debug \ OtherApp.Exe)から実行

私が呼び出すアプリケーションでは:

string ProviderPhysicalPath = @"C:\Program Files\MyCompany\MyApp\Bin";
using (DirectoryCatalog catalog = new DirectoryCatalog(ProviderPhysicalPath))
using (CompositionContainer container = new CompositionContainer(catalog))
{
     container.ComposeParts(this);
}

container.ComposeParts(this)の例外が発生します。

構成により、単一の構成エラーが発生しました。根本的な原因を以下に示します。詳細については、CompositionException.Errorsプロパティを確認してください。

1)パス'C:\ USERS \ Me \ dev \ project \ foo \ bar \ bar2 \ BIN \ DEBUG \BIN\'の一部が見つかりませんでした。

紛らわしいのは2つの部分です。

  1. 指定していないディレクトリを検索するのはなぜですか?
  2. そして、なぜそれを実行するディレクトリに\ bin \を追加するのですか?

私が間違っていることはありますか?

4

1 に答える 1

1

次の問題が発生している可能性があります。

DirectoryCatalog を使用するか、AssemblyCatalog コンストラクターにパスを渡すと、MEF は既定の読み込みコンテキストでアセンブリを読み込もうとします。ただし、アセンブリがプローブ パスまたは GAC にない場合、これは不可能であり、MEF は代わりに読み込み元コンテキストでそれらを読み込みます。

@"C:\Program Files\MyCompany\MyApp\Bin"プローブ パスにない可能性があります。私はこの問題を経験したり、よく調べたりしたとは言えません。詳細については、Daniel Plaisted のブログを参照してください。「Assembly Load Issues」セクションまで下にスクロールしてください。

MEF 障害をデバッグおよび診断する方法

于 2012-06-23T00:15:57.523 に答える