题
是否有可能得到一个导入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);
}
另一种方法是在元数据中使用硬编码值,但我认为这不会是维护。这将是容易忘记改变这些值时,所述版本改变。
解决方案
您需要从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