我的应用程序如何在运行时确定它运行的.NET框架的版本?

时间:2011-10-18 21:47:22

标签: .net

请注意,此问题是指运行应用程序的版本,而不是所有已安装的版本,以及框架(如VS中所示为“目标框架”)而不是运行时。

感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用Environment类的Version属性。 Concating主要版本号和次要版本号将为您提供框架版本(例如2.0)。 MSDN:http://msdn.microsoft.com/en-us/library/system.environment.version.aspx

答案 1 :(得分:1)

如果您想获得当前正在运行的CLR版本,请使用Novakov的方法(例如4.0.30319.239):

Environment.Version

如果您想知道项目是针对构建的CLR版本(例如4.0.0.0),请使用以下命令:

GetType().Assembly.GetReferencedAssemblies().Single(a => a.Name == "mscorlib").Version

这可能会为您提供与当前运行的CLR不同的值,因为较旧版本的程序集可能在较新版本的CLR中运行。请注意,2.0,3.0和3.5的“目标框架”都将返回2.0.0.0,因为它们都是针对CLR的2.0版本构建的。

您可以执行额外的检查,可能会发现CLR 2.0项目是使用3.5的目标框架构建的:

typeof(ConsoleSandbox.Program).Assembly.GetReferencedAssemblies()
    .SingleOrDefault(a => a.Name == "System.Core") == null

如果目标框架为3.5(如果mscorlib为4.0.0.0则为4.0),则上述表达式将评估为true;如果目标框架为2.0或3.0,或者如果未使用System.Core.dll,则评估为false (例如,已升级的2.0 / 3.0项目。)

如果你解释问题背后的需要,可能会给你一个更好的答案。