如何获得构建程序集的.NET版本(1.1,2.0,3.0等)?

时间:2008-12-05 07:13:44

标签: .net assemblies clr

我有一个集会。有没有办法检测用于构建该程序集的.NET版本?

5 个答案:

答案 0 :(得分:2)

您可以使用Assembly.ImageRuntimeVersion。根据{{​​3}},默认情况下,它设置为用于构建程序集的CLR的版本。虽然显然可以改变。

这是一个字符串属性,因此您必须对其进行一些字符串比较。

答案 1 :(得分:1)

我不相信。使用.NET 2.0构建.NET 1.1应用程序相对比较困难,虽然这并非不可能 - 所以如果你检查了引用的应用程序的mscorlib版本,你可以得到一个“可能准确”的图片,它是用1.1还是2.0构建的+。

在使用VS2008时,你还需要问自己你想要的答案,但是要针对.NET 2.0的目标。您真的对使用哪个版本的编译器感兴趣吗?不同版本的编译器的输出之间可能存在一些特征差异。额外的功能也可以放弃它 - 如果应用程序是用C#编写的,目标是.NET 2.0,你可以找到类似于源代码中的匿名类型生成的类型。当然,这依赖于首先使用的语言功能......

为什么你需要知道这个,出于兴趣?

答案 2 :(得分:1)

对于框架< 2.0和框架4.0,引用的mscorlib的版本将为您提供框架版本。对于框架2.0 - 3.5,检查是否存在对System.Core或其他3.5+程序集以及PresentationCore或任何其他3.0+程序集的任何引用。如果您没有这些,则应该定位2.0。

答案 3 :(得分:0)

您可以使用System.Reflection来检查系统引用的程序集的版本号。

using System;
using System.Reflection;

class Module1
{

    public static void CheckReferencedAssemblies(string assemblyPath)
    {
         Assembly a = Assembly.Load(assemblyPath);

        foreach (AssemblyName an in a.GetReferencedAssemblies() )
        {
             // Check an.Version for System assemblies
        }
    }
}

编辑:我不确定我是否理解你想要的东西。

答案 4 :(得分:0)

你的问题的一部分问题是.NET在版本增加时没有改变代码方面做得很好。我的意思是mscorlib在.NET 4.0中与.NET 1.1中的相同。

但我同意Jon Skeet的隐含问题:你为什么需要知道?这纯粹是出于兴趣,因为我认为这对你来说无关紧要。