如何:判斷安裝的 .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版本:

如需偵測每個版本.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 安裝程式 子機碼 開頭不是 句點。

登錄中的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 版以外的所有 Windows 作業系統上:461814
.NET Framework 4.8 在 2019 年 11 月更新Windows 10 2019 年 5 月更新和Windows 10:528040
在 Windows 10 2020 年 5 月更新、2020 年 10 月更新、2021 年 11 月更新、2021 年 11 月更新和 2022 年 5 月更新:528372
在 Windows 11 和 Windows Server 2022 上:528449
在所有其他 Windows 作業系統上, (包括其他Windows 10作業系統) :528049
.NET Framework 4.8.1 在 Windows 11 2022 更新:533320
所有其他 Windows 作業系統:533325

最小版本

若要判斷是否有最低版本的.NET Framework存在,請檢查發行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。 如果完整子機碼不存在,則您尚未安裝 .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

(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full").Release -ge 394802

使用程式碼查詢登錄

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

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

下列範例會檢查登錄中Release專案的值,以尋找已安裝的 .NET Framework 4.5-4.8 版本。

提示

如果您尚未這麼做,請在程式碼檔案頂端新增 指示詞 using Microsoft.Win32Imports 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"))}");
    }
    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 >= 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";
}
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"))}")
        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
    If releaseKey >= 528040 Then
        Return "4.8 or later"
    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

此範例遵循版本檢查的建議做法:

  • 它會檢查 Release 項目值是否「大於或等於」已知版本機碼的值。
  • 它會從最新版本依序檢查到最舊版本。

偵測.NET Framework 1.0 到 4.0

從 1.1 到 4.0 的每個.NET Framework版本都會列為HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP的子機碼。 下表列出每個.NET Framework版本的路徑。 對於大部分版本,有 安裝REG_DWORD 值1 ,表示已安裝此版本。 在這些子機碼中,也有包含版本字串的 Version REG_SZ 值。

注意

登錄路徑中的 NET Framework 安裝程式 子機碼 不是 以句點開頭。

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

使用登錄編輯器 (舊版架構)

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

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

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

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

    .NET Framework 3.5 的登錄專案。

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

使用 類別 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}");
                }
                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}");
                    }
                }
            }
        }
    }
}
' 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}")
                Else
                    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}")
                    Else
                        Console.WriteLine($"  {subKeyName}  {name}")
                    End If

                End If
            Next
        End If
    Next
End Using

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

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.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 和更新版本中所述。

    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 版本資訊:

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

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

    Version: 4.0.30319.18010
    

另請參閱