2012-02-02 8 views
2

現在、MEFとDirectoryCatalogを使用して一部の拡張DLLから一部の部品をロードしています。これは私にとって、そしてプログラムを使用するほとんどの人にとっては役に立ちますが、一部のユーザーは、ロードされていない部分をまったく経験しません。いくつかのデバッグ情報を収集すると、MEFはDLLをロードします(catalog.LoadedFilesにリストされています)が、catalog.Partsにはリストされていないようです。MEFパーツのリストが空の場合があります

1人のユーザーがXP sp3を使用し、1人がWindows 7を使用しているため、OSが問題ではないと私は思っています。誰がなぜこれが起こっているのかについての考えがありますか?

以下は、何かを助ける場合に備えて、実際にコンテナを作成するコードです。

 private static IEnumerable<Task> CreateTypes() 
    { 
     CompositionContainer container = GetContainer(); 
     var exp = container.GetExports<Task>(); 
     return exp.Select(e => e.Value); 
    } 

    private static CompositionContainer container; 
    public static CompositionContainer GetContainer() 
    { 
     if (container != null) 
      return container; 

     DirectoryCatalog catalog = new DirectoryCatalog(ExtensionDirectory, "*.dll"); 
     container = new CompositionContainer(catalog); 
     return container; 
    } 
+0

いくつかのコードが役に立ちます。 –

+0

コンテナの作成中にエラーはありませんか? – blindmeis

+0

いいえ、コンテナを作成しても問題ありません。部品リストが一部の人にとって空になるだけです。私はコードで更新しましたが、どのように役立つかわかりません。 – Jamie

答えて

1

http://mikehadlow.blogspot.com/2011/07/mef-directorycatalog-fails-to-load.html

基本的には(はい、私は...年以上後に...自分の質問に答えるよ)IEは、Windowsのエクスプローラで解凍しましたDLLはインターネットからのものであるとマークされていたため、MEFはそれらの部品をロードすることを拒否しましたが、まだカタログ内に表示されていました。

解決方法(私の状況では少なくとも)上記のリンクに記載されているように、DLLがインターネットからのものであると言った代替データストリームを削除するだけでした。

0

が、他の一つは、 "C:\ Spiele" である

はこれのことを思い出す、ユーザーが作成したフォルダのように聞こえるいる:

組立負荷の問題

.NETでは、アセンブリを読み込むためのさまざまなコンテキストがあります。デフォルトのロードコンテキストは一般的には使用するのが最適ですが、アプリケーションのベースディレクトリにないアセンブリ、プロービングパスに含まれるアプリケーションベースのサブディレクトリ、またはGACをロードすることはできません。 DirectoryCatalogを使用する場合、またはAssemblyCatalogコンストラクタにパスを渡す場合、MEFはデフォルトのロードコンテキストでアセンブリをロードしようとします。ただし、アセンブリがプロービングパスまたはGACにない場合、これは不可能であり、MEFは代わりにロード元のコンテキストでそれらをロードします。

ロード元のコンテキストでは、型の識別に問題が発生し、InvalidCastException、MissingMethodException、またはその他のエラーが発生する可能性があります。 MEFアプリケーションでこれらの問題を回避するには、アプリケーションのベースディレクトリの下に任意の拡張ディレクトリを置いて、アプリケーション構成ファイルのプロービングプライベートパスに追加します。その他のオプションおよび.NETでのアセンブリの読み込みの詳細については、「アセンブリ読み込みのベストプラクティス」を参照してください。

さらに詳しいデバッグ情報とツールについては、ソース「How to Debug and Diagnose MEF Failures」を参照してください。一部の人々が使用してプログラムをダウンロードしたので

関連する問題