インポートされた MEF 関数のアセンブリ情報を取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3832278

  •  26-09-2019
  •  | 
  •  

質問

インポートされた MEF 関数からアセンブリ情報を取得することはできますか?関数を含むプラグイン コントロールのアセンブリのバージョンと名前を知る必要があります。次のことを試しましたが、System.ComponentModel.Composition バージョンが返されるだけです。

foreach (Lazy<Func<int>, IMetadata> func in PluginFuncs)
{
    // get assembly information of the Plugin control for the imported function 
    string version = func.GetType().Assembly.GetName().Version.ToString();
    Console.WriteLine(version);
}

もう 1 つの選択肢は、メタデータでハードコードされた値を使用することですが、これは保守可能ではないと思いました。バージョンが変わったときにこれらの値を変更することを忘れがちです。

役に立ちましたか?

解決

内部から型を確認する必要があります func.Value, ではなく、 Lazy<T,TMeta> それを包みます。試す:

Func<int> lambdaFunc = func.Value;
Delegate del = lambdaFunc;
string version = del.Method.ReflectedType.Assembly.GetName().Version.ToString();

ただし、これにより評価されることを認識してください。 Lazy<T> この時点では - ただし、型を取得しようとしているオブジェクトは、それを評価するまで構築されていないため、これは必須です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top