如何:確定已安裝的 .NET Framework 版本

如何:確定已安裝的 .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 Setup 子項不以句點開頭。

註冊表中的 Release REG_DWORD 值代表已安裝的 .NET Framework 版本。

檢測 .NET FRAMEWORK 4.5 及更高版本
.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

使用註冊表編輯器

  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-ItemProperty "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full").Release -ge 394802

使用代碼查詢註冊表

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

  2. 檢查 Release REG_DWORD 值以確定已安裝的版本。 爲了向前兼容,可檢查是否有一個值大於或等於 .NET Framework 版本表中所列的值。

以下示例檢查註冊表中“Release”條目的值,以查找已安裝的 .NET Framework 4.5-4.8:

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.
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 子項不以句點開頭。

檢測 .NET FRAMEWORK 1.0 到 4.0
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 子項的註冊表路徑與其他子項不同。

使用註冊表編輯器(較舊的框架版本)

  1. 在“開始”菜單中,選擇“運行”,輸入“regedit”,然後選擇“確定” 。

    必須具有管理憑據才能運行 regedit。

  2. 打開與要檢查的版本匹配的子項。 使用檢測 .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 中運行,則註冊表路徑與前面列出的不同。 可在 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:

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

查找 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 及更高版本中所述查詢註冊表。

    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 表示版本 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章