是否有可能得到一个导入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> - 但这是必需的,因为在那里你试图获得类型的对象没有被构建,直到您评估

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top