如何:确定安装了哪些 .NET Framework 版本

用户可在他们的计算机上安装和运行 .NET Framework 的多个版本。 当你开发或部署应用时,你可能需要知道用户的计算机上安装了哪些 .NET Framework 版本。 请注意,.NET Framework 由两个采用不同版本的主要组件构成:

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

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

若要获取计算机上安装的 .NET Framework 版本的准确列表,你可以在代码中查看注册表或查询注册表:

查看注册表(版本 1-4)
查看注册表(版本 4.5 和更高版本)
使用代码查询注册表(版本 1-4)
使用代码查询注册表(版本 4.5 和更高版本)
使用 PowerShell 查询注册表(版本 4.5 及更高版本)

若要查找 CLR 版本,你可以使用工具或代码:

使用 Clrver 工具
使用代码查询 System.Environment 类

有关检测每个版本 .NET Framework 所安装更新的信息,请参阅如何:确定安装了哪些 .NET Framework 更新。 若要了解如何安装 .NET Framework,请参阅安装面向开发人员的 .NET Framework

通过查看注册表来查找 .NET Framework 版本 (.NET Framework 1-4)

  1. 在“开始”菜单上,选择“运行”。

  2. 在“打开”框中,输入“regedit.exe”。

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

  3. 在注册表编辑器中,打开以下子项:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP

    安装的版本将在 NDP 子项的下方列出。 版本号存储在“版本”项中。 对于 .NET Framework 4,“版本”项位于客户端或完整子项下(在 NDP 下),或在这两个子项下。

    备注

    注册表中的“NET Framework Setup”文件夹不会以句点开头。

通过查看注册表来查找 .NET Framework 版本(.NET Framework 4.5 和更高版本)

  1. 在“开始”菜单上,选择“运行”。

  2. 在“打开”框中,输入“regedit.exe”。

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

  3. 在注册表编辑器中,打开以下子项:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full

    请注意,Full 子项的路径包括 Net Framework 子项,而不包括 .NET Framework

    备注

    如果 Full 子项不存在,则表示你尚未安装 .NET Framework 4.5 或更高版本。

    检查名为 Release 的 DWORD 值。 存在 Release DWORD 表明该计算机上已安装 .NET Framework 4.5 或更新版本。

    .NET Framework 4.5 的注册表项。

    Release DWORD 的值指示将安装的 .NET Framework 版本。

    重要

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

    Release DWORD 的值版本
    378389.NET Framework 4.5
    378675使用 Windows 8.1 或 Windows Server 2012 R2 安装的 .NET Framework 4.5.1
    378758安装在 Windows 8、Windows 7 SP1 或 Windows Vista SP2 上的 .NET Framework 4.5.1
    379893.NET Framework 4.5.2
    仅在 Windows 10 系统上:393295

    在所有其他操作系统版本上:393297
    .NET Framework 4.6
    仅在 Windows 10 11 月更新系统上:394254

    在所有其他操作系统版本上:394271
    .NET Framework 4.6.1
    仅在 Windows 10 周年更新上:394802

    在所有其他操作系统版本上:394806
    .NET Framework 4.6.2
    仅在 Windows 10 创意者更新上:460798

    在所有其他操作系统版本上: 460805
    .NET Framework 4.7
    仅在 Windows 10 秋季创意者更新上:461308

    在所有其他操作系统版本上:461310
    .NET Framework 4.7.1
    仅 Windows 10 2018 年 4 月更新中:461808

    在所有其他操作系统版本上:461814
    .NET Framework 4.7.2

通过在代码中查询注册表来查找 .NET Framework 版本 (.NET Framework 1-4)

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

    下面的代码显示此查询的示例。

    备注

    此代码不演示如何检测 .NET Framework 4.5 或更高版本。 检查 Release DWORD 以检测这些版本,如上一节所述。 有关检测 .NET Framework 4.5 或更高版本的代码,请参阅本文的下一节。

    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.OpenRemoteBaseKey(RegistryHive.LocalMachine, "").
                    OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
                {
                    // As an alternative, if you know the computers you will query are running .NET Framework 4.5 
                    // or later, you can use:
                    // using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, 
                    // RegistryView.Registry32).OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
                foreach (string versionKeyName in ndpKey.GetSubKeyNames())
                {
                    if (versionKeyName.StartsWith("v"))
                    {
    
                        RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName);
                        string name = (string)versionKey.GetValue("Version", "");
                        string sp = versionKey.GetValue("SP", "").ToString();
                        string install = versionKey.GetValue("Install", "").ToString();
                        if (install == "") //no install info, must be later.
                            Console.WriteLine(versionKeyName + "  " + name);
                        else
                        {
                            if (sp != "" && install == "1")
                            {
                                Console.WriteLine(versionKeyName + "  " + name + "  SP" + sp);
                            }
    
                        }
                        if (name != "")
                        {
                            continue;
                        }
                        foreach (string subKeyName in versionKey.GetSubKeyNames())
                        {
                            RegistryKey subKey = versionKey.OpenSubKey(subKeyName);
                            name = (string)subKey.GetValue("Version", "");
                            if (name != "")
                                sp = subKey.GetValue("SP", "").ToString();
                            install = subKey.GetValue("Install", "").ToString();
                            if (install == "") //no install info, must be later.
                                Console.WriteLine(versionKeyName + "  " + name);
                            else
                            {
                                if (sp != "" && install == "1")
                                {
                                    Console.WriteLine("  " + subKeyName + "  " + name + "  SP" + sp);
                                }
                                else if (install == "1")
                                {
                                    Console.WriteLine("  " + subKeyName + "  " + name);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    

    该示例生成类似下面内容的输出:

    复制

    v2.0.50727  2.0.50727.4016  SP2
    v3.0  3.0.30729.4037  SP2
    v3.5  3.5.30729.01  SP1
    v4
      Client  4.0.30319
      Full  4.0.30319
    

通过在代码中查询注册表来查找 .NET Framework 版本(.NET Framework 4.5 和更高版本)

  1. Release DWORD 的存在表明该计算机上已安装 .NET Framework 4.5 或更高版本。 关键字的值表示已安装的版本。 要检查此关键字,请使用 Microsoft.Win32.RegistryKey 类的 OpenBaseKey 和 OpenSubKey 方法访问 Windows 注册表中 HKEY_LOCAL_MACHINE 下的 Software\Microsoft\NET Framework Setup\NDP\v4\Full 子项。

  2. 检查 Release 关键字的值以确定安装的版本。 为了向前兼容,你可以检查是否有一个值大于或等于表中所列的值。 此处是 .NET Framework 版本及相关联的 Release 关键字。

    重要

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

    版本Release DWORD 的值
    .NET Framework 4.5378389
    使用 Windows 8.1 安装的 .NET Framework 4.5.1378675
    安装在 Windows 8、Windows 7 SP1 或 Windows Vista SP2 上的 .NET Framework 4.5.1378758
    .NET Framework 4.5.2379893
    使用 Windows 10 安装的 .NET Framework 4.6393295
    在所有其他 Windows 操作系统版本上安装的 .NET Framework 4.6393297
    在 Windows 10 上安装的 .NET Framework 4.6.1394254
    在所有其他 Windows 操作系统版本上安装的 .NET Framework 4.6.1394271
    在 Windows 10 周年更新上安装的 .NET Framework 4.6.2394802
    在所有其他 Windows 操作系统版本上安装的 .NET Framework 4.6.2394806
    在 Windows 10 创意者更新上安装的 .NET Framework 4.7460798
    在所有其他 Windows 操作系统版本上安装的 .NET Framework 4.7460805
    在 Windows 10 Fall Creators Update 上安装的 .NET Framework 4.7.1461308
    在所有其他 Windows 操作系统版本上安装的 .NET Framework 4.7.1461310
    Windows 10 2018 年 4 月更新上安装的 .NET Framework 4.7.2461808
    在所有其他 Windows 操作系统版本上安装的 .NET Framework 4.7.2461814

    以下示例检查注册表中的 Release 值来确定是否已安装 .NET Framework 4.5 或更高版本的 .NET Framework。

    C#复制

    using System;
    using Microsoft.Win32;
    
    public class GetDotNetVersion
    {
       public static void Main()
       {
          GetDotNetVersion.Get45PlusFromRegistry();
       }
    
       private static void Get45PlusFromRegistry()
       {
          const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";
    
       	using (RegistryKey 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 >= will enable forward compatibility.
       private static string CheckFor45PlusVersion(int releaseKey)
       {
          if (releaseKey >= 461808)
             return "4.7.2 or later";
          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 及更高版本)以检查所需的 .NET Framework 最低版本的具体步骤

  • 下面的示例检查 Release 关键字的值,以确定是否已安装 .NET Framework 4.6.2 或更高版本,无论 Windows OS 版本如何(如果已安装,返回 True;否则,返回 False)。

    PowerShell复制

    Get-ChildItem "HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\" | Get-ItemPropertyValue -Name Release | ForEach-Object { $_ -ge 394802 } 
    

    可以将上一示例中的 394802 替换为下表中的另一值,以检查另一个所需的 .NET Framework 最低版本。

    版本Release DWORD 的最小值
    .NET Framework 4.5378389
    .NET Framework 4.5.1378675
    .NET Framework 4.5.2379893
    .NET Framework 4.6393295
    .NET Framework 4.6.1394254
    .NET Framework 4.6.2394802
    .NET Framework 4.7460798
    .NET Framework 4.7.1461308
    .NET Framework 4.7.2461808

使用 Clrver 工具查找当前运行时版本

  • 使用 CLR 版本工具 (Clrver.exe) 决定已安装在计算机上的公共语言运行时的版本。

    从 Visual Studio 命令提示符处,输入 clrver。 该命令生成类似下面的输出:

    复制

    Versions installed on the machine:
    v2.0.50727
    v4.0.30319
    

    有关使用此工具的详细信息,请参阅 Clrver.exe(CLR 版本工具)

通过在代码中查询 Environment 类来查找当前运行时版本

  • 查询 Environment.Version 属性,以检索标识当前正在执行代码的运行时版本的 Version 对象。 你可以使用 Version.Major 属性获取主版本标识符(例如,4.0 版的“4”),使用 Version.Minor 属性获取次版本标识符(例如,4.0 版的“0”),或使用 Object.ToString 方法获取完整版本字符串(例如“4.0.30319.18010”,如下面的代码中所示)。 此属性返回一个值,该值反映当前正在执行代码的运行时的版本;它不返回程序集版本或可能已在计算机上安装的运行时的其他版本。

    对于 .NET Framework 版本 4、4.5、4.5.1 和 4.5.2,Environment.Version 属性返回字符串表现形式具有窗体 4.0.30319.xxxxx 的 Version 对象。 对于 .NET Framework 4.6 及更高版本,形式为 4.0.30319.42000

    重要

    对于 .NET Framework 4.5 和更高版本,不建议使用 Environment.Version 属性来检测运行时的版本。 相反,我们建议查询注册表,如本文前面通过用代码查询注册表来查找 .NET Framework 版本(.NET Framework 4.5 及更高版本)一节所述。

    以下是在 Environment.Version 属性中查询运行时版本信息的示例:

    C#复制

    using System;
    
    public class VersionTest
    {
        public static void Main()
        {
            Console.WriteLine($"Version: {Environment.Version}");
        }
    }
    

    该示例生成类似下面内容的输出:

    复制

    Version: 4.0.30319.18010
    

请参阅

如何:确定安装了哪些 .NET Framework 更新
安装面向开发者的 .NET Framework
版本和依赖关系

反馈

我们衷心期待你的反馈意见。 请选择要提供的反馈类型:

产品反馈  登录以提供文档反馈

 

我们就 GitHub 问题建立了新的反馈系统。 阅读我们的博客文章,了解相关内容。

正在加载反馈...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值