编程语言
首页 > 编程语言> > CodeGo.net>如何获取导入的MEF功能的汇编信息?

CodeGo.net>如何获取导入的MEF功能的汇编信息?

作者:互联网

是否可以从导入的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< Teta>包装它.尝试:

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

然而,意识到这将评估Lazy T值.在这一点上-但这是必需的,因为要评估类型的对象直到构造完之后才构造.

标签:mef,net-assembly,c
来源: https://codeday.me/bug/20191209/2096374.html