閱讀英文

共用方式為


如何:判斷安裝的 .NET Framework 版本

注意

本文專屬於 .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

登錄

您可以使用登錄來偵測已安裝哪些 .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。 如果遺漏 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 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 年更新和 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 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
.NET Framework 4.8.1 533320

使用登錄編輯程式

  1. 從 [開始] 功能表上,選擇 [執行],輸入 regedit,然後選取 [確定]

    (您必須具有系統管理認證才能執行 regedit。)

  2. 在登錄編輯程式中,開啟下列子機碼:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full。 如果 Full 子機碼不存在,即表示未安裝 .NET Framework 4.5 或更新版本。

  3. 檢查是否有名為 Release 的 REG_DWORD 項目。 如果存在,則您已安裝 .NET Framework 4.5 或更新版本。 其值會對應至特定版本的 .NET Framework。 例如,下圖中 Release 項目的值是 528040,也就是 .NET Framework 4.8 的版本機碼。

    .NET Framework 4.5 的登錄項目

使用 PowerShell 來檢查最低版本

使用 PowerShell 命令檢查 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full 子機碼的 Release 項目值。

下列範例會檢查 Release 項目值,以判斷是否安裝了 .NET Framework 4.6.2 或更新版本。 如已安裝,則此程式碼會傳回 True;否則傳回 False

PowerShell
(Get-ItemPropertyValue -LiteralPath 'HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -Name Release) -ge 394802

使用程式碼查詢登錄

  1. 使用 RegistryKey.OpenBaseKeyRegistryKey.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

  2. 檢查 Release REG_DWORD 項目的值,判斷已安裝的版本。 若要正向相容,請檢查是否有大於或等於 .NET Framework 版本表中所列值的值。

下列範例會檢查登錄中的 Release 項目值,尋找已安裝的 .NET Framework 4.5-4.8.1 版本。

提示

如果您尚未這麼做,請在程式碼檔案頂端新增指示詞 using Microsoft.Win32Imports Microsoft.Win32

C#
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.
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";
}

範例會顯示如下的輸出:

輸出
.NET Framework Version: 4.6.1

使用 PowerShell 查詢登錄

下列範例會使用 PowerShell 來檢查登錄中的 Release 項目值,尋找已安裝的 .NET Framework 4.5-4.8.1 版本:

PowerShell
$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 資料夾開頭不是英文句號。

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 中執行,則登錄路徑會與先前列出的路徑不同。 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 子機碼的登錄路徑與其他子機碼不同。

使用登錄編輯器 (舊版 Framework)

  1. 從 [開始] 功能表上,選擇 [執行],輸入 regedit,然後選取 [確定]

    您必須具有系統管理認證才能執行 regedit。

  2. 開啟符合您要檢查的版本的子機碼。 使用 .NET Framework 1.0-4.0 區段中的資料表。

    下圖顯示 .NET Framework 3.5 的子機碼及其 Version 值。

    .NET Framework 3.5 的登錄項目。

使用程式碼查詢登錄 (舊版 Framework)

使用 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 版本:

C#
// 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

使用 PowerShell 查詢登錄 (舊版 Framework)

下列範例會使用 PowerShell 來檢查登錄中的 Release 項目值,尋找已安裝的 .NET Framework 1-4 版本:

PowerShell
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.Version 屬性

重要

針對 .NET Framework 4.5 和更新版本,請不要使用 Environment.Version 屬性偵測 CLR 的版本。 請改為查詢登錄,如 .NET Framework 4.5 和更新版本中所述。

  1. 查詢 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。

  2. 取得 Version 物件之後,如下所示來加以查詢:

    • 針對主要版本識別項 (例如 4.0 版的 4),請使用 Version.Major 屬性。
    • 針對次要版本識別項 (例如 4.0 版的 0),請使用 Version.Minor 屬性。
    • 針對整個版本字串 (例如 4.0.30319.18010),請使用 Version.ToString 方法。 這個方法會傳回單一值,其反映執行程式碼的執行階段版本。 它不會傳回組件版本或可能已安裝在電腦上的其他執行階段版本。

下列範例使用 Environment.Version 屬性來擷取 CLR 版本資訊:

C#
Console.WriteLine($"Version: {Environment.Version}");

範例會顯示類似下面的輸出:

輸出
Version: 4.0.30319.18010

另請參閱