用户可在他们的计算机上安装和运行 .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)
-
在“开始”菜单上,选择“运行”。
-
在“打开”框中,输入“regedit.exe”。
你必须具有管理凭据才能运行 regedit.exe。
-
在注册表编辑器中,打开以下子项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP
安装的版本将在 NDP 子项的下方列出。 版本号存储在“版本”项中。 对于 .NET Framework 4,“版本”项位于客户端或完整子项下(在 NDP 下),或在这两个子项下。
备注
注册表中的“NET Framework Setup”文件夹不会以句点开头。
通过查看注册表来查找 .NET Framework 版本(.NET Framework 4.5 和更高版本)
-
在“开始”菜单上,选择“运行”。
-
在“打开”框中,输入“regedit.exe”。
你必须具有管理凭据才能运行 regedit.exe。
-
在注册表编辑器中,打开以下子项:
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 或更新版本。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 和更高版本)
-
Release
DWORD 的存在表明该计算机上已安装 .NET Framework 4.5 或更高版本。 关键字的值表示已安装的版本。 要检查此关键字,请使用 Microsoft.Win32.RegistryKey 类的 OpenBaseKey 和 OpenSubKey 方法访问 Windows 注册表中 HKEY_LOCAL_MACHINE 下的 Software\Microsoft\NET Framework Setup\NDP\v4\Full 子项。 -
检查
Release
关键字的值以确定安装的版本。 为了向前兼容,你可以检查是否有一个值大于或等于表中所列的值。 此处是 .NET Framework 版本及相关联的Release
关键字。重要
下表仅列出了 .NET Framework 已发布版本的密钥。 它并没有列出预览版或预发布版本的密钥。
版本 Release DWORD 的值 .NET Framework 4.5 378389 使用 Windows 8.1 安装的 .NET Framework 4.5.1 378675 安装在 Windows 8、Windows 7 SP1 或 Windows Vista SP2 上的 .NET Framework 4.5.1 378758 .NET Framework 4.5.2 379893 使用 Windows 10 安装的 .NET Framework 4.6 393295 在所有其他 Windows 操作系统版本上安装的 .NET Framework 4.6 393297 在 Windows 10 上安装的 .NET Framework 4.6.1 394254 在所有其他 Windows 操作系统版本上安装的 .NET Framework 4.6.1 394271 在 Windows 10 周年更新上安装的 .NET Framework 4.6.2 394802 在所有其他 Windows 操作系统版本上安装的 .NET Framework 4.6.2 394806 在 Windows 10 创意者更新上安装的 .NET Framework 4.7 460798 在所有其他 Windows 操作系统版本上安装的 .NET Framework 4.7 460805 在 Windows 10 Fall Creators Update 上安装的 .NET Framework 4.7.1 461308 在所有其他 Windows 操作系统版本上安装的 .NET Framework 4.7.1 461310 Windows 10 2018 年 4 月更新上安装的 .NET Framework 4.7.2 461808 在所有其他 Windows 操作系统版本上安装的 .NET Framework 4.7.2 461814 以下示例检查注册表中的
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.5 378389 .NET Framework 4.5.1 378675 .NET Framework 4.5.2 379893 .NET Framework 4.6 393295 .NET Framework 4.6.1 394254 .NET Framework 4.6.2 394802 .NET Framework 4.7 460798 .NET Framework 4.7.1 461308 .NET Framework 4.7.2 461808
使用 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 问题建立了新的反馈系统。 阅读我们的博客文章,了解相关内容。
正在加载反馈...