【发布时间】:2009-12-01 14:52:13
【问题描述】:
如何在正在运行的 .NET 程序中获取当前的 CLR 运行时版本?
【问题讨论】:
如何在正在运行的 .NET 程序中获取当前的 CLR 运行时版本?
【问题讨论】:
查看System.Environment.Version 属性。
https://docs.microsoft.com/en-us/dotnet/api/system.environment.version
【讨论】:
System.Environment.Version 将返回 4.0.30319.42000。
从 .NET 4.5 开始,您不能真正使用 System.Environment.Version(它只会返回 4.0.{something},允许您验证您“至少”在 4.0 上,但不会告诉您哪个实际版本可用除非您可以在其中映射完整的内部版本号列表)。
相反(正如@jim-w 提到的)你必须check the registry 反对“简单”的查找表。这有点荒谬,而且是特定于 Windows 的,不适用于 .NET Core ...
但是......从 .NET 4.7.1 开始,他们将一个类从 .NET Core 反向移植到完整的框架中,您现在可以查看System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription
不幸的是,它在版本号之前返回一个带有“.NET Core”、“.NET Framework”或“.NET Native”的字符串——所以你还有一些解析工作要做。
【讨论】:
尝试Environment.Version 获取该信息。另外您可能需要致电ToString()。
【讨论】:
这对我有用:
public static String GetRunningFrameworkVersion()
{
String netVer = Environment.Version;
Assembly assObj = typeof( Object ).GetTypeInfo().Assembly;
if ( assObj != null )
{
AssemblyFileVersionAttribute attr;
attr = (AssemblyFileVersionAttribute)assObj.GetCustomAttribute( typeof(AssemblyFileVersionAttribute) );
if ( attr != null )
{
netVer = attr.Version;
}
}
return netVer;
}
我为 .NET 4.5 编译了我的 .NET 程序,它返回以在 .NET 4.8 下运行:
"4.8.4150.0"
【讨论】:
如果您只想找出版本并且不需要对其进行解析或版本类型,只需执行以下操作:
Console.WriteLine(System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription);
如果您的应用通过 .Net Framework 4.7.2 运行,它会返回类似 .NET Framework 4.7.3875.0 的内容。
如果您的应用通过 .Net 6 运行,它会返回类似 .NET 6.0.0-rtm.21522.10 的内容。
【讨论】: