如何:確定已安裝的 .NET Framework 版本
用戶可在他們的計算機上安裝和運行 .NET Framework 的多個版本。 當你開發或部署應用時,你可能需要知道用戶的計算機上安裝了哪些 .NET Framework 版本。 註冊表包含計算機上安裝的 .NET Framework 版本列表。
備註
本文特定於 .NET Framework。 若要確定安裝了哪些 .NET Core、.NET 5+ SDK 和運行時,請參閱如何檢查是否已安裝 .NET。
.NET Framework 由兩個採用不同版本的主要組件構成:
-
一組程序集,它們是爲應用提供功能的類型與資源的集合。 .NET Framework 和程序集使用相同的版本號。 例如,.NET Framework 版本包括 4.5、4.6.1 和 4.7.2。
-
公共語言運行時 (CLR),可管理並執行應用代碼。 單個 CLR 版本通常可支持多個 .NET Framework 版本。 例如,CLR 版本4.0.30319.xxxxx(其中 xxxxx 小於42000)支持 .NET Framework 版本 4 到 4.5.2。 大於或等於4.0.30319.42000 的 CLR 版本支持從 .NET Framework 4.6 開始的 .NET Framework 版本。
可使用社區維護的工具幫助檢測安裝了哪些 .NET Framework 版本:
-
https://github.com/jmalarcon/DotNetVersions
.NET Framework 2.0 命令行工具。
-
https://github.com/EliteLoser/DotNetVersionLister
PowerShell 2.0 模塊。
要了解如何檢測已安裝的每個 .NET Framework 版本的更新,請參閱操作說明:確定已安裝的 .NET Framework 更新。
確定應用運行於的 .NET 實現和版本
可以使用 RuntimeInformation.FrameworkDescription 屬性來查詢應用運行於的 .NET 實現和版本。 如果應用在 .NET Framework 上運行,則輸出將類似於:
.NET Framework 4.8.4250.0
相比之下,如果應用在 .NET Core 或 .NET 5+ 上運行,則輸出將類似於:
.NET Core 3.1.9
.NET 5.0.0
檢測 .NET Framework 4.5 及更高版本
計算機上安裝的 .NET Framework 版本(4.5 及更高版本)列出在註冊表中,位於 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full。 如果缺少 Full 子項,則未安裝 .NET Framework 4.5 或更高版本。
備註
註冊表路徑中的 .NET Framework Setup 子項不以句點開頭。
註冊表中的 Release REG_DWORD 值代表已安裝的 .NET Framework 版本。
.NET Framework 版本 | Release 的值 |
---|---|
.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 月更新和 Windows 10 2019 年 11 月更新上:528040 在 Windows 10 2020 年 5 月更新和 Windows 10 2020 年 10 月更新中:528372 在所有其他 Windows 操作系統(包括其他 Windows 10 操作系統)上:528049 |
最低版本
若要確定是否存在 .NET Framework 的最低版本,請查看大於或等於下列表中列出的相應值的“Release”REG_DWORD 值。 例如,如果應用程序在 .NET Framework 4.8 或更高版本下運行,請測試 Release REG_DWORD 值是否大於或等於 528040。
.NET Framework 版本 | 最小值 |
---|---|
.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 |
.NET Framework 4.8 | 528040 |
使用註冊表編輯器
-
在“開始”菜單中,選擇“運行”,輸入“regedit”,然後選擇“確定” 。
(必須具有管理憑據才能運行 regedit。)
-
在註冊表編輯器中,打開以下子項:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full。 如果“Full”子項不存在,則表示尚未安裝 .NET Framework 4.5 或更高版本。
-
請檢查名爲“Release”的 REG_DWORD 條目。 如果存在,則已安裝 .NET Framework 4.5 或更高版本。 其值對應於 .NET Framework 的特定版本。 以下圖爲例,“Release”條目的值爲 528040,這是 .NET Framework 4.8 的版本密鑰。
使用 PowerShell 檢查最低版本
使用 PowerShell 命令檢查 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full 子項“Release”條目的值\。
以下示例檢查“Release”條目的值,以確定是否已安裝 .NET Framework 4.6.2 或更高版本。 如果安裝了此代碼,則返回 True
,否則返回 False
。
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full").Release -ge 394802
使用代碼查詢註冊表
-
使用 RegistryKey.OpenBaseKey 和 RegistryKey.OpenSubKey 方法訪問 Windows 註冊表中的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full 子項。
重要
如果運行的應用是 32 位且在 64 位 Windows 中運行,則註冊表路徑與前面列出的不同。 可在 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ 子項中找到 64 位註冊表。 例如,.NET Framework 4.5 的註冊表子項爲 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full。
-
檢查 Release REG_DWORD 值以確定已安裝的版本。 爲了向前兼容,可檢查是否有一個值大於或等於 .NET Framework 版本表中所列的值。
以下示例檢查註冊表中“Release”條目的值,以查找已安裝的 .NET Framework 4.5-4.8:
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.
static 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";
}
此示例顯示類似以下內容的輸出:
.NET Framework Version: 4.6.1
此示例遵循版本檢查的建議做法:
- 檢查“Release”條目的值是否大於或等於已知版本密鑰的值。
- 按從最新版本到最早版本的順序檢查。
檢測 .NET Framework 1.0 到 4.0
.NET Framework 1.1 到 4.0 的每個版本都作爲子項列出在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP。 下表列出了每個 .NET Framework 版本的路徑。 對於大多數版本,都有 Install REG_DWORD 值 1
,指示已安裝此版本。 在這些子項中,還有一個包含版本字符串的 Version REG_SZ 值。
備註
註冊表路徑中的 .NET Framework Setup 子項不以句點開頭。
Framework 版本 | 註冊表子項 | “值” |
---|---|---|
1.0 | HKLM\Software\Microsoft\.NETFramework\Policy\v1.0\3705 | Install REG_SZ 等於 1 |
1.1 | HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322 | Install REG_DWORD 等於 1 |
2.0 | HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727 | Install REG_DWORD 等於 1 |
3.0 | HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup | InstallSuccess REG_DWORD 等於 1 |
3.5 | HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5 | Install REG_DWORD 等於 1 |
4.0 客戶端配置文件 | HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client | Install REG_DWORD 等於 1 |
4.0 完整配置文件 | HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full | Install REG_DWORD 等於 1 |
重要
如果運行的應用是 32 位且在 64 位 Windows 中運行,則註冊表路徑與前面列出的不同。 可在 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ 子項中找到 64 位註冊表。 例如,.NET Framework 3.5 的註冊表子項爲 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5。
請注意,.NET Framework 1.0 子項的註冊表路徑與其他子項不同。
使用註冊表編輯器(較舊的框架版本)
-
在“開始”菜單中,選擇“運行”,輸入“regedit”,然後選擇“確定” 。
必須具有管理憑據才能運行 regedit。
-
打開與要檢查的版本匹配的子項。 使用檢測 .NET Framework 1.0 到 4.0部分列出的表。
下圖顯示了 .NET Framework 3.5 的子項及其 Version 值。
使用代碼查詢註冊表(較舊的框架版本)
使用 Microsoft.Win32.RegistryKey 類訪問 Windows 註冊表中的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP 子項。
重要
如果運行的應用是 32 位且在 64 位 Windows 中運行,則註冊表路徑與前面列出的不同。 可在 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ 子項中找到 64 位註冊表。 例如,.NET Framework 3.5 的註冊表子項爲 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5。
以下示例查找已安裝的 .NET Framework 1-4:
// Open 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.
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 (install == "1")
{
// Install = 1 means the version is installed.
if (!string.IsNullOrEmpty(sp))
{
Console.WriteLine($"{versionKeyName} {name} SP{sp}");
}
else
{
Console.WriteLine($"{versionKeyName} {name}");
}
}
if (!string.IsNullOrEmpty(name))
{
continue;
}
// else print out info from subkeys...
// Iterate through the subkeys of the version subkey.
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 (install == "1")
{
if (!string.IsNullOrEmpty(sp))
{
Console.WriteLine($"{subKeyName} {name} SP{sp}");
}
else
{
Console.WriteLine($" {subKeyName} {name}");
}
}
}
}
}
該示例顯示類似於以下內容的輸出:
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 版本
隨 .NET Framework 一起安裝 .NET Framework CLR 單獨進行版本控制。 可通過兩種方式檢測 .NET Framework CLR 的版本:
-
Clrver 工具
使用 CLR 版本工具 (Clrver.exe) 確定計算機上安裝了哪些版本的 CLR。 打開 Visual Studio 開發人員命令提示並輸入
clrver
。示例輸出:
控制檯Versions installed on the machine: v2.0.50727 v4.0.30319
-
Environment
類重要
對於 .NET Framework 4.5 及更高版本,請勿使用 Environment.Version 屬性來檢測 CLR 的版本。 而應按照檢測 .NET Framework 4.5 及更高版本中所述查詢註冊表。
-
查詢 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。
-
獲得 Version 對象後,按如下方式查詢:
-
對於主要版本標識符(例如,4 表示版本 4.0),請使用 Version.Major 屬性。
-
對於次要版本標識符(例如,0 表示版本 4.0),請使用 Version.Minor 屬性
-
對於整個版本字符串(例如,4.0.30319.18010),請使用 Version.ToString 方法。 此方法返回一個值,該值反映正在執行代碼的運行時的版本。 它不返回可能安裝在計算機上的程序集版本或其他運行時版本。
-
以下示例使用 Environment.Version 屬性檢索 CLR 版本信息:
C#Console.WriteLine($"Version: {Environment.Version}");
該示例顯示類似於以下內容的輸出:
輸出Version: 4.0.30319.18010
-