【问题标题】:Get Current .NET CLR version at runtime?在运行时获取当前的 .NET CLR 版本?
【发布时间】:2009-12-01 14:52:13
【问题描述】:

如何在正在运行的 .NET 程序中获取当前的 CLR 运行时版本?

【问题讨论】:

    标签: .net clr


    【解决方案1】:

    【讨论】:

    • .NET 4.5 将返回一个以 4.0 开头的版本号。见en.wikipedia.org/wiki/List_of_.NET_Framework_versions
    • 来自docs.microsoft.com/en-us/dotnet/framework/migration-guide/…的警告“对于 .NET Framework 4.5 及更高版本,我们不建议使用 System.Environment.Version 属性来检测运行时的版本。相反,我们建议您查询注册表,如本文前面的通过在代码中查询注册表(.NET Framework 4.5 及更高版本)部分中所述来查找 .NET Framework 版本。”大声笑。
    • 这个答案可能早在 2009 年就有效,但今天完全错误。对于 4.5.1 之后的任何 DotNet 版本,System.Environment.Version 将返回 4.0.30319.42000。
    【解决方案2】:

    从 .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”的字符串——所以你还有一些解析工作要做。

    【讨论】:

    • 更高版本包含更多信息——.NET Framework 4.7.3190.0
    • 注册表检查不是一个好的解决方案,因为它告诉您安装了哪些框架版本,而不是应用程序运行在哪个版本上。您可以安装 .Net Framework 4.0、4.1、4.2、....、4.8,应用程序可以在其中任何一个上运行,甚至可以通过 .Net5 运行时...
    【解决方案3】:

    尝试Environment.Version 获取该信息。另外您可能需要致电ToString()

    【讨论】:

      【解决方案4】:

      这对我有用:

      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"

      【讨论】:

        【解决方案5】:

        如果您只想找出版本并且不需要对其进行解析或版本类型,只需执行以下操作:

        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 的内容。

        【讨论】:

          猜你喜欢
          • 2010-10-12
          • 1970-01-01
          • 2019-08-23
          • 1970-01-01
          • 2012-02-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-11
          相关资源
          最近更新 更多