是否可以从导入的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);
}
另一种选择是在元数据中使用硬编码值,但我认为这不可维护。当版本发生变化时,很容易忘记更改这些值。
答案 0 :(得分:3)
您需要检查func.Value
内的类型,而不是Lazy<T,TMeta>
包装它。尝试:
Func<int> lambdaFunc = func.Value;
Delegate del = lambdaFunc;
string version = del.Method.ReflectedType.Assembly.GetName().Version.ToString();
然而,要意识到这将在此时评估Lazy<T>
- 但这是必需的,因为在您评估它之前,尚未构建您尝试获取该类型的对象。