インポートされた MEF 関数のアセンブリ情報を取得するにはどうすればよいですか?
-
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>
この時点では - ただし、型を取得しようとしているオブジェクトは、それを評価するまで構築されていないため、これは必須です。
所属していません StackOverflow