如何:确定已安装的 .NET Framework 版本

用户可在他们的计算机上安装和运行 .NET Framework 的多个版本。 当你开发或部署应用时,你可能需要知道用户的计算机上安装了哪些 .NET Framework 版本。

.NET Framework 由两个采用不同版本的主要组件构成:

  • 一组程序集,它们是为应用提供功能的类型与资源的集合。 .NET Framework 和程序集使用相同的版本号。

  • 公共语言运行时 (CLR),可管理并执行应用的代码。 CLR 由其自己的版本号标识(请参阅版本和依赖关系)。

 备注

每个新版本的 .NET Framework 都会保留早期版本中的功能并会添加新功能。 可在同一台计算机上同时加载多个版本的 .NET Framework,这意味着可安装 .NET Framework 而无需卸载以前的版本。 通常,你不应卸载以前版本的 .NET Framework,因为你使用的应用程序可能依赖于特定版本,如果删除该版本,可能会中断。

.NET Framework 版本和 CLR 版本之间存在差异:

  • .NET Framework 版本基于构成 .Net Framework 类库的一组程序集。 例如,.NET Framework 版本包括 4.5、4.6.1 和 4.7.2。
  • CLR 版本基于 .NET Framework 应用程序执行的运行时。 单个 CLR 版本通常可支持多个 .NET Framework 版本。 例如,CLR 版本 4.0.30319.xxxxx 支持 .NET Framework 版本 4 到 4.5.2(其中 xxxxx 小于 42000),而 CLR 版本 4.0.30319.42000 支持从 .NET Framework 4.6 开始的 .NET Framework 版本。

有关版本的详细信息,请参见 .NET Framework 版本和依赖关系

若要获取计算机上安装的 .NET Framework 版本列表,请访问注册表。 可使用注册表编辑器查看注册表或使用代码进行查询:

若要获取计算机上安装的 CLR 版本列表,请使用工具或代码:

有关检测安装的每个 .NET Framework 版本的更新的信息,请参阅如何:确定已安装的 .NET Framework 更新

查找较新的 .NET Framework 版本(4.5 及更高版本)

在注册表中查找 .NET Framework 4.5 及更高版本

  1. 在“开始”菜单中,选择“运行”,输入 regedit,然后选择“确定” 。

    必须具有管理凭据才能运行 regedit。

  2. 在注册表编辑器中,打开以下子项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full. 如果“完整”子项不存在,则表示尚未安装 .NET Framework 4.5 或更高版本 。

     备注

    注册表中的“.NET Framework 安装程序” 文件夹不以句点开头 。

  3. 请检查名为“Release”的 DWORD 条目 。 如果存在,则安装 .NET Framework 4.5 或更高版本。 其值是对应于特定版本的 .NET Framework 的版本密钥。 以下图为例,“Release”条目的值为 378389,这是 .NET Framework 4.5 的版本密钥 。

    .NET Framework 4.5 的注册表项

下表列出了 .NET Framework 4.5 及更高版本的独立操作系统的 Release DWORD 的值。

 重要

下表仅列出了 .NET Framework 已发布版本的密钥。 它并没有列出预览版或预发布版本的密钥。

.NET Framework 版本Release DWORD 的值
.NET Framework 4.5 所有 Windows 操作系统:378389
.NET Framework 4.5.1 在 Windows 8.1 和 Windows Server 2012 R2 上:378675
在所有其他 Windows 操作系统上:378758
.NET Framework 4.5.2 所有 Windows 操作系统:379893
.NET Framework 4.6 在 Windows 10 上:393295
在所有其他 Windows 操作系统上:393297
.NET Framework 4.6.1 在 Windows 10 11 月更新系统上:394254
在所有其他 Windows 操作系统(包括 Windows 10)上:394271
.NET Framework 4.6.2 在 Windows 10 周年更新和 Windows Server 2016 上:394802
在所有其他 Windows 操作系统(包括其他 Windows 10 操作系统)上:394806
.NET Framework 4.7 在 Windows 10 创意者更新上:460798
在所有其他 Windows 操作系统(包括其他 Windows 10 操作系统)上:460805
.NET Framework 4.7.1 在 Windows 10 Fall Creators Update 和 Windows Server 版本 1709 上:461308
在所有其他 Windows 操作系统(包括其他 Windows 10 操作系统)上:461310
.NET Framework 4.7.2 在 Windows 10 2018 年 4 月更新和 Windows Server 版本 1803 上:461808
在除 Windows 10 2018 年 4 月更新和 Windows Server 版本 1803 之外的所有 Windows 操作系统上:461814
.NET Framework 4.8 在 Windows 10 2019 年 5 月更新上:528040
在所有其他 Windows 操作系统(包括其他 Windows 10 操作系统)上:528049

可以使用这些值,如下所示:

  • 若要确定具体的 Windows 操作系统版本上是否安装了特定版本的 .NET Framework,请测试 Release DWORD 值是否等于 表中列出的值。 例如,若要确定 Windows 10 系统上是否安装了 .NET Framework 4.6,请测试 Release 值是否等于 393295 。

  • 若要确定是否安装了最低版本的 .NET Framework,请对该版本使用较小的 RELEASE DWORD 值。 例如,如果应用程序在 .NET Framework 4.6 或更高版本下运行,请测试 RELEASE DWORD 值是否大于或等于 393295 。 若要查看仅列出每个 .NET Framework 版本的最小 RELEASE DWORD 值的表,请参阅 .NET Framework 4.5 及更高版本的最小 Release DWORD 值

  • 若要测试多个版本,请先测试值是否大于或等于最新 .NET Framework 版本的较小 DWORD 值,然后将该值与每个连续较旧版本的较小 DWORD 值进行比较 。 例如,如果应用程序需要 .NET Framework 4.7 或更高版本,且你希望确定是否安装了特定版本的 .NET Framework,请先测试 RELEASE DWORD 值是否大于或等于 461808 (.NET Framework 4.7.2 的较小 DWORD 值)。 然后,将 RELEASE DWORD 值与每个更新版本的 .NET Framework 的较小值进行比较。 若要查看仅列出每个 .NET Framework 版本的最小 RELEASE DWORD 值的表,请参阅 .NET Framework 4.5 及更高版本的最小 Release DWORD 值

使用代码查找 .NET Framework 4.5 及更高版本

  1. 使用 RegistryKey.OpenBaseKey 和 RegistryKey.OpenSubKey 方法访问 Windows 注册表中的“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full”子项 。

    “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full”子项中存在“Release”DWORD 条目表示已在电脑上安装 .NET Framework 4.5 或更高版本 。

  2. 检查“Release”条目的值以确定安装的版本 。 为了向前兼容,可检查是否有一个值大于或等于 .NET Framework 版本表中所列的值。

下例检查注册表中“Release”条目的值,以查找已安装的 .NET Framework 4.5 及更高版本 :

C#
using System;
using Microsoft.Win32;

public class GetDotNetVersion
{
   public static void Main()
   {
      Get45PlusFromRegistry();
   }

   private static void Get45PlusFromRegistry()
   {
      const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";

      using (var ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))
      {
        if (ndpKey != null && ndpKey.GetValue("Release") != null) {
            Console.WriteLine($".NET Framework Version: {CheckFor45PlusVersion((int) ndpKey.GetValue("Release"))}");
        }
         else {
            Console.WriteLine(".NET Framework Version 4.5 or later is not detected.");
         } 
      }
   
      // Checking the version using >= enables forward compatibility.
      string CheckFor45PlusVersion(int releaseKey)
      {
         if (releaseKey >= 528040)
            return "4.8 or later";
         if (releaseKey >= 461808)
            return "4.7.2";
         if (releaseKey >= 461308)
            return "4.7.1";
         if (releaseKey >= 460798)
            return "4.7";
         if (releaseKey >= 394802)
            return "4.6.2";
         if (releaseKey >= 394254)
            return "4.6.1";      
         if (releaseKey >= 393295)
            return "4.6";      
         if (releaseKey >= 379893)
            return "4.5.2";      
         if (releaseKey >= 378675)
            return "4.5.1";      
         if (releaseKey >= 378389)
            return "4.5";      
         // This code should never execute. A non-null release key should mean
         // that 4.5 or later is installed.
         return "No 4.5 or later version detected";
      }
   }
}   
// This example displays output like the following:
//       .NET Framework Version: 4.6.1

此示例遵循版本检查的建议做法:

  • 检查“Release”条目的值是否大于或等于已知版本密钥的值 。

  • 按从最新版本到最早版本的顺序检查。

使用 PowerShell 检查所需的 .NET Framework 的最低版本(4.5 或更高版本)

  • 使用 PowerShell 命令检查“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full”子项的“Release”条目的值 。

以下示例检查“Release”条目的值,以确定是否已安装 .NET Framework 4.6.2 或更高版本 。 如果安装了此代码,则返回 True,否则返回 False

PowerShell
# PowerShell 5
 Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\' |  Get-ItemPropertyValue -Name Release | Foreach-Object { $_ -ge 394802 }
PowerShell
# PowerShell 4
(Get-ItemProperty "HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full").Release -ge 394802

若要检查不同的所需最低 .NET Framework 版本,请使用 .NET Framework 版本表中的“Release”值替换这些示例中的 394802 。

查找较旧的 .NET Framework 版本 1–4

在注册表中查找 .NET Framework 版本 1–4

  1. 在“开始”菜单中,选择“运行”,输入 regedit,然后选择“确定” 。

    必须具有管理凭据才能运行 regedit。

  2. 在注册表编辑器中,打开以下子项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP

    • 对于 .NET Framework 1.1 到 3.5 版,每个安装的版本都在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP”子项下列为子项 。 例如,“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5” 。 版本号存储为版本子项的“Version”条目中的值 。

    • 对于 .NET Framework 4,“Version”条目位于“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Client”或“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Full”子项下,或同时位于这两个子项下 。

     备注

    注册表中的“.NET Framework 安装程序”文件夹不以句点开头 。

    下图显示了 .NET Framework 3.5 的子项及其“Version”条目 。

    .NET Framework 3.5 的注册表项。

使用代码查找 .NET Framework 版本 1–4

  • 使用 Microsoft.Win32.RegistryKey 类访问 Windows 注册表中的“HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP”子项 。

以下示例查找已安装的 .NET Framework 1-4 1–4:

C#
using Microsoft.Win32;
using System;

public static class VersionTest
{
    public static void Main()
    {
        GetVersionFromRegistry();
    }
    
    private static void GetVersionFromRegistry()
    {
        // Opens the registry key for the .NET Framework entry.
        using (RegistryKey ndpKey = 
                RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).
                OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
        {
            foreach (var versionKeyName in ndpKey.GetSubKeyNames())
            {
                // Skip .NET Framework 4.5 version information.
                if (versionKeyName == "v4")
                {
                    continue;
                }

                if (versionKeyName.StartsWith("v"))
                {

                    RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName);
                    // Get the .NET Framework version value.
                    var name = (string)versionKey.GetValue("Version", "");
                    // Get the service pack (SP) number.
                    var sp = versionKey.GetValue("SP", "").ToString();

                    // Get the installation flag, or an empty string if there is none.
                    var install = versionKey.GetValue("Install", "").ToString();
                    if (string.IsNullOrEmpty(install)) // No install info; it must be in a child subkey.
                        Console.WriteLine($"{versionKeyName}  {name}");
                    else
                    {
                        if (!(string.IsNullOrEmpty(sp)) && install == "1")
                        {
                            Console.WriteLine($"{versionKeyName}  {name}  SP{sp}");
                        }
                    }
                    if (! string.IsNullOrEmpty(name))
                    {
                        continue;
                    }
                    foreach (var subKeyName in versionKey.GetSubKeyNames())
                    {
                        RegistryKey subKey = versionKey.OpenSubKey(subKeyName);
                        name = (string)subKey.GetValue("Version", "");
                        if (! string.IsNullOrEmpty(name))
                            sp = subKey.GetValue("SP", "").ToString();
                        
                        install = subKey.GetValue("Install", "").ToString();
                        if (string.IsNullOrEmpty(install)) //No install info; it must be later.
                            Console.WriteLine($"{versionKeyName}  {name}");
                        else
                        {
                            if (!(string.IsNullOrEmpty(sp )) && install == "1")
                            {
                                Console.WriteLine($"{subKeyName}  {name}  SP{sp}");
                            }
                            else if (install == "1")
                            {
                                Console.WriteLine($"  {subKeyName}  {name}");
                            }
                        }
                    }
                }
            }
        }
    }
}
// The example displays output similar to the following:
//        v2.0.50727  2.0.50727.4927  SP2
//        v3.0  3.0.30729.4926  SP2
//        v3.5  3.5.30729.4926  SP1
//        v4.0
//        Client  4.0.0.0

查找 CLR 版本

使用 Clrver.exe 查找当前的 CLR 版本

使用 CLR 版本工具 (Clrver.exe) 确定计算机上安装了哪些版本的 CLR:

使用 Environment 类查找当前的 CLR 版本

 重要

对于 .NET Framework 4.5 及更高版本,请勿使用 Environment.Version 属性来检测 CLR 的版本。 而应按照使用代码查找 .NET Framework 4.5 及更高版本中所述查询注册表。

  1. 查询 Environment.Version 属性以检索 Version 对象。

    返回的 System.Version 对象标识当前正在执行代码的运行时版本。 它不返回计算机上可能已安装的程序集版本或运行时的其他版本。

    对于 .NET Framework 版本 4、4.5、4.5.1 和 4.5.2,返回的 Version 对象的字符串表示形式为 4.0.30319. xxxxx(其中 xxxxx 小于 42000)。 对于 .NET Framework 4.6 及更高版本,它的格式为 4.0.30319.42000。

  2. 获得 Version 对象后,按如下方式查询:

    • 对于主要版本标识符(例如,4 表示版本 4.0),请使用 Version.Major 属性 。

    • 对于次要版本标识符(例如,0 表示版本 4.0),请使用 Version.Minor 属性

    • 对于整个版本字符串(例如,4.0.30319.18010),请使用 Version.ToString 方法 。此方法返回一个值,该值反映正在执行代码的运行时的版本。 它不返回可能安装在计算机上的程序集版本或其他运行时版本。

以下示例使用 Environment.Version 属性检索 CLR 版本信息:

C#
using System;

public class VersionTest
{
    public static void Main()
    {
        Console.WriteLine($"Version: {Environment.Version}");
    }
}
// The example displays output similar to the following:'
//    Version: 4.0.30319.18010

来源:https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed

 

用户可在他们的计算机上安装和运行 .NET Framework 的多个版本。 当你开发或部署应用时,你可能需要知道用户的计算机上安装了哪些 .NET Framework 版本。

.NET Framework 由两个采用不同版本的主要组件构成:

  • 一组程序集,它们是为应用提供功能的类型与资源的集合。 .NET Framework 和程序集使用相同的版本号。

  • 公共语言运行时 (CLR),可管理并执行应用的代码。 CLR 由其自己的版本号标识(请参阅版本和依赖关系)。

 备注

每个新版本的 .NET Framework 都会保留早期版本中的功能并会添加新功能。 可在同一台计算机上同时加载多个版本的 .NET Framework,这意味着可安装 .NET Framework 而无需卸载以前的版本。 通常,你不应卸载以前版本的 .NET Framework,因为你使用的应用程序可能依赖于特定版本,如果删除该版本,可能会中断。

.NET Framework 版本和 CLR 版本之间存在差异:

  • .NET Framework 版本基于构成 .Net Framework 类库的一组程序集。 例如,.NET Framework 版本包括 4.5、4.6.1 和 4.7.2。
  • CLR 版本基于 .NET Framework 应用程序执行的运行时。 单个 CLR 版本通常可支持多个 .NET Framework 版本。 例如,CLR 版本 4.0.30319.xxxxx 支持 .NET Framework 版本 4 到 4.5.2(其中 xxxxx 小于 42000),而 CLR 版本 4.0.30319.42000 支持从 .NET Framework 4.6 开始的 .NET Framework 版本。

有关版本的详细信息,请参见 .NET Framework 版本和依赖关系

若要获取计算机上安装的 .NET Framework 版本列表,请访问注册表。 可使用注册表编辑器查看注册表或使用代码进行查询:

若要获取计算机上安装的 CLR 版本列表,请使用工具或代码:

有关检测安装的每个 .NET Framework 版本的更新的信息,请参阅如何:确定已安装的 .NET Framework 更新

查找较新的 .NET Framework 版本(4.5 及更高版本)

在注册表中查找 .NET Framework 4.5 及更高版本

  1. 在“开始”菜单中,选择“运行”,输入 regedit,然后选择“确定” 。

    必须具有管理凭据才能运行 regedit。

  2. 在注册表编辑器中,打开以下子项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full. 如果“完整”子项不存在,则表示尚未安装 .NET Framework 4.5 或更高版本 。

     备注

    注册表中的“.NET Framework 安装程序” 文件夹不以句点开头 。

  3. 请检查名为“Release”的 DWORD 条目 。 如果存在,则安装 .NET Framework 4.5 或更高版本。 其值是对应于特定版本的 .NET Framework 的版本密钥。 以下图为例,“Release”条目的值为 378389,这是 .NET Framework 4.5 的版本密钥 。

    .NET Framework 4.5 的注册表项

下表列出了 .NET Framework 4.5 及更高版本的独立操作系统的 Release DWORD 的值。

 重要

下表仅列出了 .NET Framework 已发布版本的密钥。 它并没有列出预览版或预发布版本的密钥。

.NET Framework 版本Release DWORD 的值
.NET Framework 4.5 所有 Windows 操作系统:378389
.NET Framework 4.5.1 在 Windows 8.1 和 Windows Server 2012 R2 上:378675
在所有其他 Windows 操作系统上:378758
.NET Framework 4.5.2 所有 Windows 操作系统:379893
.NET Framework 4.6 在 Windows 10 上:393295
在所有其他 Windows 操作系统上:393297
.NET Framework 4.6.1 在 Windows 10 11 月更新系统上:394254
在所有其他 Windows 操作系统(包括 Windows 10)上:394271
.NET Framework 4.6.2 在 Windows 10 周年更新和 Windows Server 2016 上:394802
在所有其他 Windows 操作系统(包括其他 Windows 10 操作系统)上:394806
.NET Framework 4.7 在 Windows 10 创意者更新上:460798
在所有其他 Windows 操作系统(包括其他 Windows 10 操作系统)上:460805
.NET Framework 4.7.1 在 Windows 10 Fall Creators Update 和 Windows Server 版本 1709 上:461308
在所有其他 Windows 操作系统(包括其他 Windows 10 操作系统)上:461310
.NET Framework 4.7.2 在 Windows 10 2018 年 4 月更新和 Windows Server 版本 1803 上:461808
在除 Windows 10 2018 年 4 月更新和 Windows Server 版本 1803 之外的所有 Windows 操作系统上:461814
.NET Framework 4.8 在 Windows 10 2019 年 5 月更新上:528040
在所有其他 Windows 操作系统(包括其他 Windows 10 操作系统)上:528049

可以使用这些值,如下所示:

  • 若要确定具体的 Windows 操作系统版本上是否安装了特定版本的 .NET Framework,请测试 Release DWORD 值是否等于 表中列出的值。 例如,若要确定 Windows 10 系统上是否安装了 .NET Framework 4.6,请测试 Release 值是否等于 393295 。

  • 若要确定是否安装了最低版本的 .NET Framework,请对该版本使用较小的 RELEASE DWORD 值。 例如,如果应用程序在 .NET Framework 4.6 或更高版本下运行,请测试 RELEASE DWORD 值是否大于或等于 393295 。 若要查看仅列出每个 .NET Framework 版本的最小 RELEASE DWORD 值的表,请参阅 .NET Framework 4.5 及更高版本的最小 Release DWORD 值

  • 若要测试多个版本,请先测试值是否大于或等于最新 .NET Framework 版本的较小 DWORD 值,然后将该值与每个连续较旧版本的较小 DWORD 值进行比较 。 例如,如果应用程序需要 .NET Framework 4.7 或更高版本,且你希望确定是否安装了特定版本的 .NET Framework,请先测试 RELEASE DWORD 值是否大于或等于 461808 (.NET Framework 4.7.2 的较小 DWORD 值)。 然后,将 RELEASE DWORD 值与每个更新版本的 .NET Framework 的较小值进行比较。 若要查看仅列出每个 .NET Framework 版本的最小 RELEASE DWORD 值的表,请参阅 .NET Framework 4.5 及更高版本的最小 Release DWORD 值

使用代码查找 .NET Framework 4.5 及更高版本

  1. 使用 RegistryKey.OpenBaseKey 和 RegistryKey.OpenSubKey 方法访问 Windows 注册表中的“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full”子项 。

    “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full”子项中存在“Release”DWORD 条目表示已在电脑上安装 .NET Framework 4.5 或更高版本 。

  2. 检查“Release”条目的值以确定安装的版本 。 为了向前兼容,可检查是否有一个值大于或等于 .NET Framework 版本表中所列的值。

下例检查注册表中“Release”条目的值,以查找已安装的 .NET Framework 4.5 及更高版本 :

C#
using System;
using Microsoft.Win32;

public class GetDotNetVersion
{
   public static void Main()
   {
      Get45PlusFromRegistry();
   }

   private static void Get45PlusFromRegistry()
   {
      const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";

      using (var ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))
      {
        if (ndpKey != null && ndpKey.GetValue("Release") != null) {
            Console.WriteLine($".NET Framework Version: {CheckFor45PlusVersion((int) ndpKey.GetValue("Release"))}");
        }
         else {
            Console.WriteLine(".NET Framework Version 4.5 or later is not detected.");
         } 
      }
   
      // Checking the version using >= enables forward compatibility.
      string CheckFor45PlusVersion(int releaseKey)
      {
         if (releaseKey >= 528040)
            return "4.8 or later";
         if (releaseKey >= 461808)
            return "4.7.2";
         if (releaseKey >= 461308)
            return "4.7.1";
         if (releaseKey >= 460798)
            return "4.7";
         if (releaseKey >= 394802)
            return "4.6.2";
         if (releaseKey >= 394254)
            return "4.6.1";      
         if (releaseKey >= 393295)
            return "4.6";      
         if (releaseKey >= 379893)
            return "4.5.2";      
         if (releaseKey >= 378675)
            return "4.5.1";      
         if (releaseKey >= 378389)
            return "4.5";      
         // This code should never execute. A non-null release key should mean
         // that 4.5 or later is installed.
         return "No 4.5 or later version detected";
      }
   }
}   
// This example displays output like the following:
//       .NET Framework Version: 4.6.1

此示例遵循版本检查的建议做法:

  • 检查“Release”条目的值是否大于或等于已知版本密钥的值 。

  • 按从最新版本到最早版本的顺序检查。

使用 PowerShell 检查所需的 .NET Framework 的最低版本(4.5 或更高版本)

  • 使用 PowerShell 命令检查“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full”子项的“Release”条目的值 。

以下示例检查“Release”条目的值,以确定是否已安装 .NET Framework 4.6.2 或更高版本 。 如果安装了此代码,则返回 True,否则返回 False

PowerShell
# PowerShell 5
 Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\' |  Get-ItemPropertyValue -Name Release | Foreach-Object { $_ -ge 394802 }
PowerShell
# PowerShell 4
(Get-ItemProperty "HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full").Release -ge 394802

若要检查不同的所需最低 .NET Framework 版本,请使用 .NET Framework 版本表中的“Release”值替换这些示例中的 394802 。

查找较旧的 .NET Framework 版本 1–4

在注册表中查找 .NET Framework 版本 1–4

  1. 在“开始”菜单中,选择“运行”,输入 regedit,然后选择“确定” 。

    必须具有管理凭据才能运行 regedit。

  2. 在注册表编辑器中,打开以下子项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP

    • 对于 .NET Framework 1.1 到 3.5 版,每个安装的版本都在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP”子项下列为子项 。 例如,“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5” 。 版本号存储为版本子项的“Version”条目中的值 。

    • 对于 .NET Framework 4,“Version”条目位于“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Client”或“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Full”子项下,或同时位于这两个子项下 。

     备注

    注册表中的“.NET Framework 安装程序”文件夹不以句点开头 。

    下图显示了 .NET Framework 3.5 的子项及其“Version”条目 。

    .NET Framework 3.5 的注册表项。

使用代码查找 .NET Framework 版本 1–4

  • 使用 Microsoft.Win32.RegistryKey 类访问 Windows 注册表中的“HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP”子项 。

以下示例查找已安装的 .NET Framework 1-4 1–4:

C#
using Microsoft.Win32;
using System;

public static class VersionTest
{
    public static void Main()
    {
        GetVersionFromRegistry();
    }
    
    private static void GetVersionFromRegistry()
    {
        // Opens the registry key for the .NET Framework entry.
        using (RegistryKey ndpKey = 
                RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).
                OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
        {
            foreach (var versionKeyName in ndpKey.GetSubKeyNames())
            {
                // Skip .NET Framework 4.5 version information.
                if (versionKeyName == "v4")
                {
                    continue;
                }

                if (versionKeyName.StartsWith("v"))
                {

                    RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName);
                    // Get the .NET Framework version value.
                    var name = (string)versionKey.GetValue("Version", "");
                    // Get the service pack (SP) number.
                    var sp = versionKey.GetValue("SP", "").ToString();

                    // Get the installation flag, or an empty string if there is none.
                    var install = versionKey.GetValue("Install", "").ToString();
                    if (string.IsNullOrEmpty(install)) // No install info; it must be in a child subkey.
                        Console.WriteLine($"{versionKeyName}  {name}");
                    else
                    {
                        if (!(string.IsNullOrEmpty(sp)) && install == "1")
                        {
                            Console.WriteLine($"{versionKeyName}  {name}  SP{sp}");
                        }
                    }
                    if (! string.IsNullOrEmpty(name))
                    {
                        continue;
                    }
                    foreach (var subKeyName in versionKey.GetSubKeyNames())
                    {
                        RegistryKey subKey = versionKey.OpenSubKey(subKeyName);
                        name = (string)subKey.GetValue("Version", "");
                        if (! string.IsNullOrEmpty(name))
                            sp = subKey.GetValue("SP", "").ToString();
                        
                        install = subKey.GetValue("Install", "").ToString();
                        if (string.IsNullOrEmpty(install)) //No install info; it must be later.
                            Console.WriteLine($"{versionKeyName}  {name}");
                        else
                        {
                            if (!(string.IsNullOrEmpty(sp )) && install == "1")
                            {
                                Console.WriteLine($"{subKeyName}  {name}  SP{sp}");
                            }
                            else if (install == "1")
                            {
                                Console.WriteLine($"  {subKeyName}  {name}");
                            }
                        }
                    }
                }
            }
        }
    }
}
// The example displays output similar to the following:
//        v2.0.50727  2.0.50727.4927  SP2
//        v3.0  3.0.30729.4926  SP2
//        v3.5  3.5.30729.4926  SP1
//        v4.0
//        Client  4.0.0.0

查找 CLR 版本

使用 Clrver.exe 查找当前的 CLR 版本

使用 CLR 版本工具 (Clrver.exe) 确定计算机上安装了哪些版本的 CLR:

使用 Environment 类查找当前的 CLR 版本

 重要

对于 .NET Framework 4.5 及更高版本,请勿使用 Environment.Version 属性来检测 CLR 的版本。 而应按照使用代码查找 .NET Framework 4.5 及更高版本中所述查询注册表。

  1. 查询 Environment.Version 属性以检索 Version 对象。

    返回的 System.Version 对象标识当前正在执行代码的运行时版本。 它不返回计算机上可能已安装的程序集版本或运行时的其他版本。

    对于 .NET Framework 版本 4、4.5、4.5.1 和 4.5.2,返回的 Version 对象的字符串表示形式为 4.0.30319. xxxxx(其中 xxxxx 小于 42000)。 对于 .NET Framework 4.6 及更高版本,它的格式为 4.0.30319.42000。

  2. 获得 Version 对象后,按如下方式查询:

    • 对于主要版本标识符(例如,4 表示版本 4.0),请使用 Version.Major 属性 。

    • 对于次要版本标识符(例如,0 表示版本 4.0),请使用 Version.Minor 属性

    • 对于整个版本字符串(例如,4.0.30319.18010),请使用 Version.ToString 方法 。此方法返回一个值,该值反映正在执行代码的运行时的版本。 它不返回可能安装在计算机上的程序集版本或其他运行时版本。

以下示例使用 Environment.Version 属性检索 CLR 版本信息:

C#
using System;

public class VersionTest
{
    public static void Main()
    {
        Console.WriteLine($"Version: {Environment.Version}");
    }
}
// The example displays output similar to the following:'
//    Version: 4.0.30319.18010

请参阅

posted @ 2019-09-17 15:12  一万年以前  阅读(955)  评论(0编辑  收藏  举报