備註
本文是 .NET Framework 特有的。 若要判斷已安裝哪些 .NET Core 和 .NET 5+ SDK 和執行階段,請參閱如何 檢查已安裝 .NET。
您可以在電腦上安裝和執行多個版本的 .NET Framework。
- 如果您想檢查自己電腦上的版本,最簡單的方法是透過「控制面板>」、「程式>」、「程式和功能」,或在「設定」下「應用程式>」下「已安裝的應用程式」。 您也可以使用 這些社群維護的工具。
- 如果您是應用程式開發人員,您可能需要知道應用程式使用者的電腦上安裝了哪些 .NET Framework 版本。
登錄包含電腦上安裝的 .NET Framework 版本清單。 您也可以查詢屬性
RuntimeInformation.FrameworkDescription。 - 若要尋找獨立版號的 CLR 版本,請參閱 尋找 CLR 版本。
.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 版本已安裝 更新 的相關資訊,請參閱 如何:判斷已安裝的 .NET Framework 更新。
社群維護的工具
社群維護的工具可用來協助偵測已安裝的 .NET Framework 版本:
RuntimeInformation.FrameworkDescription 屬性
若要以程式設計方式查詢應用程式正在執行的 .NET 版本,您可以使用屬性 RuntimeInformation.FrameworkDescription 。 如果應用程式是在 .NET Framework 上執行,輸出會類似於:
.NET Framework 4.8.4250.0
相較之下,如果應用程式是在 .NET Core 或 .NET 5+ 上執行,則輸出會類似於:
.NET Core 3.1.9
.NET 5.0.0
Registry
您可以使用登錄來偵測已安裝的 .NET Framework 版本。 .NET Framework 1.0-4.0 和 .NET Framework 4.5+ 的索引鍵不同。 您可以使用登錄編輯器、PowerShell 或代碼來檢查登錄。
.NET Framework 4.5 和更新版本
電腦上安裝的 .NET Framework (4.5 和更新版本) 會列在登錄中,網址為 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full。 如果遺漏 完整子項,則尚未安裝 .NET Framework 4.5 或更新版本。
備註
登錄路徑中的 NET Framework 安裝程式 子機碼 不會 以句點開頭。
登錄中的 Release REG_DWORD 值代表已安裝的 .NET Framework 版本。
| .NET Framework 版本 | 發布價值 |
|---|---|
| .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 框架 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 月更新、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 2025 更新上: 533509 在 Windows 11 2022 更新版本和 Windows 11 2023 更新版本上: 533320 所有其他 Windows 作業系統: 533325 |
最低版本
若要判斷是否有 最低 版本的 .NET Framework,請檢查 Release REG_DWORD 值是否大於或等於下表所列的對應值。 例如,如果您的應用程式在 .NET Framework 4.8 或更新版本下執行,請測試大於或等於 528040 的 Release REG_DWORD 值。
| .NET Framework 版本 | 最小值 |
|---|---|
| .NET Framework 4.5 | 378389 |
| .NET Framework 4.5.1 | 378675 |
| .NET Framework 4.5.2 | 379893 |
| .NET 框架 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 |
| .NET Framework 4.8.1 | 533320 |
使用註冊表編輯器
從 [ 開始] 功能表中,選擇 [執行],輸入 regedit,然後選取 [確定]。
(您必須具有系統管理認證才能執行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。 例如,在下圖中, 發行 專案的值為 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 中執行,則登錄路徑將與先前列出的不同。 32 位登錄可在 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 (RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32))
using (RegistryKey ndpKey = baseKey.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 >= 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 baseKey As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32),
ndpKey As RegistryKey = baseKey.OpenSubKey(subkey)
If ndpKey IsNot Nothing AndAlso ndpKey.GetValue("Release") IsNot Nothing Then
Console.WriteLine($".NET Framework Version: {CheckFor45PlusVersion(ndpKey.GetValue("Release"))}")
Else
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
Select Case releaseKey
Case >= 533320 : Return "4.8.1 or later"
Case >= 528040 : Return "4.8"
Case >= 461808 : Return "4.7.2"
Case >= 461308 : Return "4.7.1"
Case >= 460798 : Return "4.7"
Case >= 394802 : Return "4.6.2"
Case >= 394254 : Return "4.6.1"
Case >= 393295 : Return "4.6"
Case >= 379893 : Return "4.5.2"
Case >= 378675 : Return "4.5.1"
Case >= 378389 : Return "4.5"
Case Else
Return "No 4.5 or later version detected"
End Select
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 安裝程式 子機碼 不會 以句點開頭。
| 框架版本 | 登錄子機碼 | 價值觀 |
|---|---|---|
| 1.0 | HKLM\Software\Microsoft\.NETFramework\Policy\v1.0\3705 |
安裝 REG_SZ等於 1 |
| 1.1 | HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322 |
安裝 REG_DWORD等於 1 |
| 2.0 | HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727 |
設定 REG_DWORD 等於 1 |
| 3.0 | HKLM\Software\Microsoft\NET Framework 安裝程式\NDP\v3.0\安裝程式 |
安裝成功 REG_DWORD等於 1 |
| 3.5 | HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5 |
安裝 REG_DWORD 等於 1 |
| 4.0 客戶簡介 | HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client |
安裝 REG_DWORD等於 1 |
| 4.0 完整檔案 | HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full |
安裝 REG_DWORD等於 1 |
這很重要
如果您執行的應用程式是 32 位元且在 64 位元 Windows 中執行,則登錄路徑將與先前列出的不同。 32 位登錄可在 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 子機碼的登錄路徑與其他子機碼不同。
使用登錄編輯器(舊版框架)
從 [ 開始] 功能表中,選擇 [執行],輸入 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 中執行,則登錄路徑將與先前列出的不同。 32 位登錄可在 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. Dispose this object when done.
RegistryKey ndpKey =
RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)
.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\");
foreach (string 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.
string name = versionKey.GetValue("Version", "").ToString();
// Get the service pack (SP) number.
string sp = versionKey.GetValue("SP", "").ToString();
// Get the installation flag.
string 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))
{
versionKey.Dispose();
continue;
}
// Iterate through the subkeys of the version subkey.
foreach (string subKeyName in versionKey.GetSubKeyNames())
{
RegistryKey subKey = versionKey.OpenSubKey(subKeyName);
name = subKey.GetValue("Version", "").ToString();
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}");
}
// Clean up the subkey object.
subKey.Dispose();
}
versionKey.Dispose();
}
}
ndpKey.Dispose();
' Open the registry key for the .NET Framework entry. Dispose this object when done.
Dim 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 = versionKey.GetValue("Version", "").ToString()
' 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
' Install = 1 means the version is installed.
If Not String.IsNullOrEmpty(sp) Then
Console.WriteLine($"{versionKeyName} {name} SP{sp}")
Else
Console.WriteLine($"{versionKeyName} {name}")
End If
End If
If Not String.IsNullOrEmpty(name) Then
versionKey.Dispose()
Continue For
End If
' Iterate through the subkeys of the version subkey.
For Each subKeyName In versionKey.GetSubKeyNames()
Dim subKey As RegistryKey = versionKey.OpenSubKey(subKeyName)
name = subKey.GetValue("Version", "").ToString()
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}")
Else
Console.WriteLine($" {subKeyName} {name}")
End If
End If
' Clean up the subkey object.
subKey.Dispose()
Next
versionKey.Dispose()
End If
Next
ndpKey.Dispose()
此範例會顯示類似下列的輸出:
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
使用 PowerShell 查詢登錄 (舊版架構)
下列範例會使用 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-ItemProperty -Path "Registry::$_").Version) }
if ($name -and ($_.Property -contains 'SP')) { $sp = $((Get-ItemProperty -Path "Registry::$_").SP) }
if ($_.Property -contains 'Install') { $install = $((Get-ItemProperty -Path "Registry::$_").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 開發人員 PowerShell ,然後輸入 clrver。
範例輸出:
Versions installed on the machine:
v2.0.50727
v4.0.30319
Environment.Version 屬性
這很重要
針對 .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 。
- 針對次要版本識別碼 ( 例如,0 代表 4.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