我们在其中一个产品中使用某种插件架构 (基于.NET)。我们必须考虑我们的客户甚至是第三方 开发人员为产品编写插件。插件将是.NET 我们的产品在运行时加载的程序集。我们没有 控制外部插件的质量或功能 (除了检查它们是否实现了正确的接口)。
因此我们需要在加载时执行某种安全检查 插件,以确保我们的产品(和托管环境) 实际上可以托管插件或提供有意义的错误消息 (“您正在加载的插件需要.NET版本42.42 - 托管 系统仅适用于版本33.33。“)。
理想情况下,插件会在内部进行此检查,但我们的 关于他们的能力的经验是如此,无论如何我们的 产品将受到责备,所以我们要确保这“正常”。要求插件开发人员在元数据中提供信息或在界面中明确提供信息被认为“太复杂”。
我知道Assembly.ImageRuntimeVersion属性。但对我来说 知识这只告诉我所需的CLR版本,而不是框架 版。而且我不想检查所有程序集的依赖项 并将它们与“框架版本与可用的表格”相匹配 组件”。
您是否有任何想法如何在简单且可维护的
中解决这个问题时尚?
谢谢&问候,Bon
答案 0 :(得分:1)
我真的不认为这可以做到。我一直在研究这个问题,许多其他人也提出了同样的问题,例如:
http://www.developersdex.com/csharp/message.asp?p=1111&r=6905306
对于每个问题,答案看起来都是一样的 - 您需要遍历目标程序集的引用程序集并分析它们以确定正在使用哪个版本的.NET框架。
编辑:
不确定是否有任何帮助,但您可以使用以下内容:
static void Main()
{
var g = Assembly.GetExecutingAssembly().GetReferencedAssemblies();
foreach (AssemblyName assemblyName in g)
{
Console.WriteLine(assemblyName.FullName);
Console.WriteLine(assemblyName.Version);
}
}
因此,您可以遍历第三方程序集的引用程序集,查找“mscorlib”并检查其版本。
答案 1 :(得分:1)
CLR版是 .NET框架版本。 .NET 3.0,3.5和3.5 SP1仅通过将程序集添加到原始2.0集来区分自己。因此,3.5 SP1的基本组件仍然带有2.0.0.0 [AssemblyVersion]。您可以在“添加引用”对话框中看到此内容。