使用者可以
在其
電腦上安裝和執行多個版本的.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 版。 CLR 版本大於或等於 4.0.30319.42000 支援從 .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 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 Creators Update: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 以外的所有作業系統版本上:461814
.NET Framework 4.8
Windows 10 2019 年 5 月更新和 Windows 10 2019 年 11 月更新上:528040
Windows 10 2020 年 5 月更新、2020 年 10 月更新、2021 年 5 月更新、2021 年 11 月更新和 2022 更新上:528372
Windows 11 和 Windows Server 2022 上:528449
其他所有 Windows 作業系統 (包括其他 Windows 10 作業系統) 上:528049
.NET Framework 4.8.1
Windows 11 2022 更新上:533320
所有其他 Windows 作業系統上:533325
若要判斷是否有最低版本的.NET Framework存在,請檢查Release REG_DWORD 值是否大於或等於下表所列的對應值。 例如,如果您的應用程式在 .NET Framework 4.8 或更新版本下執行,請測試大於或等於528040 的Release REG_DWORD 值。
.NET Framework 版本
(您必須具有系統管理認證才能執行 regedit。)
在登錄編輯程式中,開啟下列子機碼:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\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-ItemPropertyValue -LiteralPath 'HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -Name Release) -ge 394802
使用程式碼查詢登錄
使用 RegistryKey.OpenBaseKey 和 RegistryKey.OpenSubKey 方法存取 Windows 登錄中的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full 子機碼。
如果您執行的應用程式是 32 位元且在 64 位元 Windows 中執行,則登錄路徑會與先前列出的路徑不同。 64 位元登錄可在 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ 子機碼中取得。 例如,.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.1 版本。
如果您尚未這麼做,請在程式碼檔案頂端新增指示詞 using Microsoft.Win32
或 Imports Microsoft.Win32
。
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"))}");
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 >= 533320)
return "4.8.1 or later";
if (releaseKey >= 528040)
return "4.8";
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";
Private Sub Get45PlusFromRegistry()
Const subkey As String = "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\"
Using ndpKey As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey)
If ndpKey IsNot Nothing AndAlso ndpKey.GetValue("Release") IsNot Nothing Then
Console.WriteLine($".NET Framework Version: {CheckFor45PlusVersion(ndpKey.GetValue("Release"))}")
Console.WriteLine(".NET Framework Version 4.5 or later is not detected.")
End If
End Using
End Sub
' Checking the version using >= enables forward compatibility.
Private Function CheckFor45PlusVersion(releaseKey As Integer) As String
If releaseKey >= 533320 Then
Return "4.8.1 or later"
ElseIf releaseKey >= 528040 Then
Return "4.8"
ElseIf releaseKey >= 461808 Then
Return "4.7.2"
ElseIf releaseKey >= 461308 Then
Return "4.7.1"
ElseIf releaseKey >= 460798 Then
Return "4.7"
ElseIf releaseKey >= 394802 Then
Return "4.6.2"
ElseIf releaseKey >= 394254 Then
Return "4.6.1"
ElseIf releaseKey >= 393295 Then
Return "4.6"
ElseIf releaseKey >= 379893 Then
Return "4.5.2"
ElseIf releaseKey >= 378675 Then
Return "4.5.1"
ElseIf releaseKey >= 378389 Then
Return "4.5"
End If
' 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"
End Function
範例會顯示如下的輸出:
.NET Framework Version: 4.6.1
使用程式碼 PowerShell 查詢登錄
下列範例會使用 PowerShell 來檢查登錄中的Release專案值,以尋找已安裝的 .NET Framework 4.5-4.8.1 版本:
$release = Get-ItemPropertyValue -LiteralPath 'HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -Name Release
switch ($release) {
{ $_ -ge 533320 } { $version = '4.8.1 or later'; break }
{ $_ -ge 528040 } { $version = '4.8'; break }
{ $_ -ge 461808 } { $version = '4.7.2'; break }
{ $_ -ge 461308 } { $version = '4.7.1'; break }
{ $_ -ge 460798 } { $version = '4.7'; break }
{ $_ -ge 394802 } { $version = '4.6.2'; break }
{ $_ -ge 394254 } { $version = '4.6.1'; break }
{ $_ -ge 393295 } { $version = '4.6'; break }
{ $_ -ge 379893 } { $version = '4.5.2'; break }
{ $_ -ge 378675 } { $version = '4.5.1'; break }
{ $_ -ge 378389 } { $version = '4.5'; break }
default { $version = $null; break }
if ($version) {
Write-Host -Object ".NET Framework Version: $version"
} else {
Write-Host -Object '.NET Framework Version 4.5 or later is not detected.'
此範例遵循版本檢查的建議做法:
它會檢查 Release 項目值是否「大於或等於」已知版本機碼的值。
它會從最新版本依序檢查到最舊版本。
偵測 .NET Framework 1.0 到 4.0
每個從 1.1 到 4.0 的 .NET Framework版本都會列為HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP的子機碼。 下表列出每個.NET Framework版本的路徑。 對於大部分版本,會有 Install REG_DWORD 值 1
,指出已安裝此版本。 在這些子機碼中,也有包含版本字串的 Version REG_SZ 值。
登錄中的 NET Framework Setup 資料夾開頭不是英文句號。
HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup
InstallSuccess REG_DWORD 等於 1
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 中執行,則登錄路徑會與先前列出的路徑不同。 64 位元登錄可在 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ 子機碼中取得。 例如,.NET Framework 3.5 的登錄子機碼HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5。
請注意,.NET Framework 1.0 子機碼的登錄路徑與其他子機碼不同。
使用登錄編輯器 (舊版 Framework)
從 [開始] 功能表上,選擇 [執行],輸入 regedit,然後選取 [確定]。
您必須具有系統管理認證才能執行 regedit。
開啟符合您要檢查的版本的子機碼。 使用Detect .NET Framework 1.0 到 4.0區段中的資料表。
下圖顯示 .NET Framework 3.5 的子機碼及其Version值。
使用程式碼查詢登錄 (舊版 Framework)
使用 Microsoft.Win32.RegistryKey 類別存取 Windows 登錄中的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP 子機碼。
如果您執行的應用程式是 32 位元且在 64 位元 Windows 中執行,則登錄路徑會與先前列出的路徑不同。 64 位元登錄可在 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ 子機碼中取得。 例如,.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}");
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}");
Console.WriteLine($" {subKeyName} {name}");
' Opens the registry key for the .NET Framework entry.
Using ndpKey As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).
OpenSubKey("SOFTWARE\Microsoft\NET Framework Setup\NDP\")
For Each versionKeyName In ndpKey.GetSubKeyNames()
' Skip .NET Framework 4.5 and later.
If versionKeyName = "v4" Then Continue For
If versionKeyName.StartsWith("v") Then
Dim versionKey As RegistryKey = ndpKey.OpenSubKey(versionKeyName)
' Get the .NET Framework version value.
Dim name = DirectCast(versionKey.GetValue("Version", ""), String)
' Get the service pack (SP) number.
Dim sp = versionKey.GetValue("SP", "").ToString()
Dim install = versionKey.GetValue("Install", "").ToString()
If String.IsNullOrEmpty(install) Then
' No install info; it must be in a child subkey.
Console.WriteLine($"{versionKeyName} {name}")
ElseIf install = "1" Then
If Not String.IsNullOrEmpty(sp) Then
Console.WriteLine($"{versionKeyName} {name} SP{sp}")
Console.WriteLine($"{versionKeyName} {name}")
End If
End If
If Not String.IsNullOrEmpty(name) Then
Continue For
End If
For Each subKeyName In versionKey.GetSubKeyNames()
Dim subKey As RegistryKey = versionKey.OpenSubKey(subKeyName)
name = DirectCast(subKey.GetValue("Version", ""), String)
If Not String.IsNullOrEmpty(name) Then
sp = subKey.GetValue("SP", "").ToString()
End If
install = subKey.GetValue("Install", "").ToString()
If String.IsNullOrEmpty(install) Then
' No install info; it must be later.
Console.WriteLine($" {versionKeyName} {name}")
ElseIf install = "1" Then
If Not String.IsNullOrEmpty(sp) Then
Console.WriteLine($" {subKeyName} {name} SP{sp}")
Console.WriteLine($" {subKeyName} {name}")
End If
End If
End If
End Using
範例會顯示類似下面的輸出:
v2.0.50727 2.0.50727.4927 SP2
v3.0 3.0.30729.4926 SP2
v3.5 3.5.30729.4926 SP1
Client 4.0.0.0
使用 PowerShell 查詢登錄 (舊版 Framework)
下列範例會使用 PowerShell 來檢查登錄中Release專案的值,以尋找已安裝的 .NET Framework 1-4 版本:
Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' |
Where-Object { ($_.PSChildName -ne "v4") -and ($_.PSChildName -like 'v*') } |
ForEach-Object {
$name = $_.Version
$sp = $_.SP
$install = $_.Install
if (-not $install) {
Write-Host -Object "$($_.PSChildName) $($name)"
elseif ($install -eq '1') {
if (-not $sp) {
Write-Host -Object "$($_.PSChildName) $($name)"
else {
Write-Host -Object "$($_.PSChildName) $($name) SP$($sp)"
if (-not $name) {
$parentName = $_.PSChildName
Get-ChildItem -LiteralPath $_.PSPath |
Where-Object {
if ($_.Property -contains 'Version') { $name = Get-ItemPropertyValue -Path $_.PSPath -Name Version }
if ($name -and ($_.Property -contains 'SP')) { $sp = Get-ItemPropertyValue -Path $_.PSPath -Name SP }
if ($_.Property -contains 'Install') { $install = Get-ItemPropertyValue -Path $_.PSPath -Name Install }
if (-not $install) {
Write-Host -Object " $($parentName) $($name)"
elseif ($install -eq '1') {
if (-not $sp) {
Write-Host -Object " $($_.PSChildName) $($name)"
else {
Write-Host -Object " $($_.PSChildName) $($name) SP$($sp)"
尋找 CLR 版本
與 .NET Framework 一起安裝的.NET Framework CLR 會個別設定版本。 有兩種方式可以偵測.NET Framework CLR 的版本:
Clrver.exe 工具
使用 CLR 版本工具 (Clrver.exe) 以判斷電腦上安裝了哪些 CLR 版本。 開啟 Visual Studio 開發人員命令提示字元或 Visual Studio Developer PowerShell,然後輸入 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.0 版的 4),請使用 Version.Major 屬性。
針對次要版本識別項 (例如 4.0 版的 0),請使用 Version.Minor 屬性。
針對整個版本字串 (例如 4.0.30319.18010),請使用 Version.ToString 方法。 這個方法會傳回單一值,其反映執行程式碼的執行階段版本。 它不會傳回組件版本或可能已安裝在電腦上的其他執行階段版本。
下列範例使用 Environment.Version 屬性來擷取 CLR 版本資訊:
Console.WriteLine($"Version: {Environment.Version}");
Console.WriteLine($"Version: {Environment.Version}")
範例會顯示類似下面的輸出:
Version: 4.0.30319.18010
如何:判斷已安裝哪些.NET Framework更新
疑難排解:判斷已安裝哪些版本的 .NET Framework Service Pack
為開發人員安裝.NET Framework
.NET Framework 版本和相依性