How to: Determine which .NET Framework versions are installed (Jak określić, które wersje .NET Framework zainstalowane)

Użytkownicy mogą instalować i uruchamiać wiele wersji .NET Framework na swoich komputerach. Podczas tworzenia lub wdrażania aplikacji może być konieczne .NET Framework, które wersje są zainstalowane na komputerze użytkownika. Rejestr zawiera listę wersji programu .NET Framework zainstalowanych na komputerze.

Uwaga

Ten artykuł jest specyficzny dla .NET Framework. Aby ustalić, które zestawy SDK i środowiska uruchomieniowe .NET Core i .NET 5+ są zainstalowane, zobacz Jak sprawdzić, czy program .NET jest już zainstalowany.

.NET Framework składa się z dwóch głównych składników, które są wersjonarowane oddzielnie:

  • Zestaw zestawów, które są kolekcjami typów i zasobów, które zapewniają funkcjonalność aplikacji. .NET Framework i zestawy mają ten sam numer wersji. Na przykład .NET Framework to 4.5, 4.6.1 i 4.7.2.

  • Środowisko uruchomieniowe języka wspólnego (CLR), które zarządza kodem aplikacji i wykonuje go. Pojedyncza wersja clr zwykle obsługuje wiele .NET Framework wersji. Na przykład CLR w wersji 4.0.30319. xxxxx, gdzie xxxxx jest mniejsze niż 42000, obsługuje .NET Framework od 4 do 4.5.2. Wersja CLR wyższa niż lub równa 4.0.30319.42000 obsługuje .NET Framework, począwszy od wersji .NET Framework 4.6.

Community są dostępne narzędzia do wykrywania zainstalowanych wersji .NET Framework zainstalowanych:

Aby uzyskać informacje na temat wykrywania zainstalowanych aktualizacji dla każdej wersji programu .NET Framework, zobacz How to: Determine which .NET Framework updates are installed.

Określanie implementacji i wersji programu .NET, w której jest uruchomiona aplikacja

Możesz użyć właściwości , aby utworzyć zapytanie dotyczące implementacji i wersji aplikacji RuntimeInformation.FrameworkDescription .NET. Jeśli aplikacja jest uruchomiona na .NET Framework, dane wyjściowe będą podobne do:

.NET Framework 4.8.4250.0

Dla porównania, jeśli aplikacja działa na .NET Core lub .NET 5+, dane wyjściowe będą podobne do:

.NET Core 3.1.9
.NET 5.0.0

Wykrywanie .NET Framework 4.5 i nowszych

Wersja programu .NET Framework (4.5 lub nowsza) zainstalowana na maszynie znajduje się w rejestrze pod HKEY_LOCAL_MACHINE SOFTWARE Microsoft NET Framework Setup \ \ \ \ NDP \ v4 \ Full. Jeśli brakuje pełnego podklucza, program .NET Framework 4.5 lub jego więcej nie jest zainstalowany.

Uwaga

Podklucz Instalatora programu NET Framework w ścieżce rejestru nie rozpoczyna się od okresu.

Wartość release REG_DWORD w rejestrze reprezentuje wersję zainstalowanej .NET Framework wersji.

Wersja programu .NET Framework Wartość wydania
.NET Framework 4.5 Wszystkie Windows operacyjne: 378389
.NET Framework 4.5.1 Na Windows 8.1 i Windows Server 2012 R2: 378675
We wszystkich innych Windows operacyjnych: 378758
.NET Framework 4.5.2 Wszystkie Windows operacyjne: 379893
Program .NET Framework 4.6 Na Windows 10: 393295
We wszystkich innych Windows operacyjnych: 393297
.NET Framework 4.6.1 W Windows 10 listopadowych systemach aktualizacji: 394254
We wszystkich innych Windows operacyjnych (w tym w Windows 10): 394271
.NET Framework 4.6.2 W Windows 10 rocznicowej aktualizacji i Windows Server 2016: 394802
We wszystkich innych Windows operacyjnych (w tym w innych Windows 10 operacyjnych): 394806
.NET Framework 4.7 Na Aktualizacja systemu Windows 10 dla twórców: 460798
We wszystkich innych Windows operacyjnych (w tym w innych Windows 10 operacyjnych): 460805
.NET Framework 4.7.1 Na Windows 10 Fall Creators Update i Windows Server w wersji 1709: 461308
Na wszystkich innych Windows operacyjnych (w tym w innych Windows 10 operacyjnych): 461310
.NET Framework 4.7.2 W dniu Windows 10 kwietnia 2018 r. Update and Windows Server, wersja 1803: 461808
We wszystkich Windows operacyjnych innych niż Windows 10 update and Windows Server z kwietnia 2018 r., wersja 1803: 461814
.NET Framework 4.8 W Aktualizacja systemu Windows 10 z maja 2019 i Windows 10 listopad 2019 r.: 528040
W dniu Windows 10 maja 2020 r. i aktualizacji z października 2020 r. Windows 10 października 2020 r. oraz Windows 10 aktualizacji z maja 2021 r.: 528372
Na Windows 11 i Windows Server 2022: 528449
We wszystkich innych Windows operacyjnych (w tym w innych Windows 10 operacyjnych): 528049

Minimalna wersja

Aby ustalić, czy istnieje minimalna wersja .NET Framework, sprawdź wartość release REG_DWORD, która jest większa lub równa odpowiadającej wartości wymienionej w poniższej tabeli. Jeśli na przykład aplikacja działa w wersji .NET Framework 4.8 lub nowszej, przetestuj wartość release REG_DWORD, która jest większa lub równa 528040.

Wersja programu .NET Framework Wartość minimalna
.NET Framework 4.5 378389
.NET Framework 4.5.1 378675
.NET Framework 4.5.2 379893
Program .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

Korzystanie z Edytora rejestru

  1. W menu Start wybierz polecenie Uruchom, wprowadź regedit, a następnie wybierz przycisk OK.

    (Aby uruchomić regedit, musisz mieć poświadczenia administracyjne).

  2. W Edytorze rejestru otwórz następujący podklucz: HKEY_LOCAL_MACHINE SOFTWARE Microsoft NET Framework Setup \ \ \ \ NDP \ v4 \ Full. Jeśli nie ma pełnego podklucza, nie masz zainstalowanego .NET Framework 4.5 ani nowszej.

  3. Sprawdź, czy REG_DWORD o nazwie Release (Wydanie). Jeśli istnieje, masz zainstalowaną .NET Framework 4.5 lub nowszej. Jego wartość odpowiada określonej wersji .NET Framework. Na przykład na poniższej ilustracji wartość wpisu Release (Wydanie) to 528040, czyli klucz wydania dla wersji .NET Framework 4.8.

    Wpis rejestru dla .NET Framework 4.5

Sprawdzanie minimalnej wersji przy użyciu programu PowerShell

Użyj poleceń programu PowerShell, aby sprawdzić wartość wpisu Release (Wydanie) w podkluczu NDP v4 Full HKEY_LOCAL_MACHINE SOFTWARE Microsoft NET Framework Setup \ \ \ \ NDP \ \ v4 Full.

Poniższe przykłady sprawdzają wartość wpisu Release, aby określić, .NET Framework jest zainstalowana wersja 4.6.2 lub nowszy. Ten kod zwraca True wartość , jeśli jest zainstalowany. False

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

Wykonywanie zapytań w rejestrze przy użyciu kodu

  1. Użyj metod i , aby uzyskać dostęp do RegistryKey.OpenBaseKey HKEY_LOCAL_MACHINE SOFTWARE Microsoft NET Framework Setup RegistryKey.OpenSubKey \ \ \ \ NDP \ v4 Full \ podklucz w Windows rejestru.

    Ważne

    Jeśli uruchamiana aplikacja jest 32-bitowa i działa w 64-bitowej Windows, ścieżki rejestru będą inne niż wymienione wcześniej. Rejestr 64-bitowy jest dostępny w podkluczu \ oprogramowania HKEY_LOCAL_MACHINE SOFTWARE \ \ Wow6432Node. Na przykład podklucz rejestru dla programu .NET Framework 4.5 to HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft NET Framework Setup \ \ NDP \ v4 \ Full.

  2. Sprawdź wartość release REG_DWORD, aby określić zainstalowaną wersję. Aby uzyskać zgodność z przekazywaniem dalej, sprawdź, czy wartość jest większa niż lub równa wartości wymienionej w .NET Framework wersji systemu.

Poniższy przykład sprawdza wartość wpisu Release w rejestrze, aby znaleźć zainstalowane wersje .NET Framework 4.5–4.8.

Porada

Dodaj using Microsoft.Win32 dyrektywę lub Imports Microsoft.Win32 w górnej części pliku kodu, jeśli jeszcze tego nie zrobiono.

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

W przykładzie zostaną wyświetlone dane wyjściowe podobne do następujących:

.NET Framework Version: 4.6.1

Ten przykład jest zgodny z zalecaną praktyką sprawdzania wersji:

  • Sprawdza, czy wartość wpisu Release jest większa niż lub równa wartości znanych kluczy wydania.
  • Sprawdza ona kolejność od najnowszej do najwcześniejszej wersji.

Wykrywanie .NET Framework od 1.0 do 4.0

Każda wersja programu .NET Framework od 1.1 do 4.0 jest wymieniona jako podklucz w witrynie HKEY_LOCAL_MACHINE SOFTWARE Microsoft NET Framework Setup \ \ \ \ NDP. W poniższej tabeli wymieniono ścieżkę do poszczególnych .NET Framework wersji. W przypadku większości wersji wartość właściwości REG_DWORD wskazuje, 1 że ta wersja jest zainstalowana. W tych podkluczach znajduje się również wartość REG_SZ, która zawiera ciąg wersji.

Uwaga

Podklucz Instalatora programu NET Framework w ścieżce rejestru nie rozpoczyna się od okresu.

Wersja struktury Podklucz rejestru Wartość
1.0 HKLM \ Software \ Microsoft \ . NETFramework \ Policy \ 1.0 \ 3705 Instalowanie REG_SZ równa się 1
1.1 HKLM \ Software Microsoft NET Framework Setup \ \ \ NDP \ v1.1.4322 Instalowanie REG_DWORD równa się 1
2.0 HKLM \ Software Microsoft NET Framework Setup \ \ \ NDP \ v2.0.50727 Instalowanie REG_DWORD równa się 1
3.0 HKLM \ Software Microsoft NET Framework Setup \ \ \ NDP v3.0 Setup (Konfigurowanie protokołu NDP w wersji \ 3.0 oprogramowania HKLM) \ InstallSuccess REG_DWORD równa się 1
3,5 HKLM \ Software Microsoft NET Framework Setup \ \ \ NDP v3.5 (Konfigurowanie protokołu NDP w wersji 3.5 oprogramowania HKLM) \ Instalowanie REG_DWORD równa się 1
4.0. Profil klienta HKLM Software Microsoft NET Framework Setup NDP v4 Client (Oprogramowanie HKLM \ \ — klient \ \ NDP \ v4 instalatora programu Microsoft NET \ Framework) Instalowanie REG_DWORD równa się 1
4.0 Pełny profil HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Full Instalowanie REG_DWORD równa się 1

Ważne

Jeśli uruchamiana aplikacja jest 32-bitowa i działa w 64-bitowej Windows, ścieżki rejestru będą inne niż wymienione wcześniej. Rejestr 64-bitowy jest dostępny w podkluczu \ oprogramowania HKEY_LOCAL_MACHINE SOFTWARE \ \ Wow6432Node. Na przykład podklucz rejestru dla programu .NET Framework 3.5 to HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft NET Framework Setup \ \ NDP \ v3.5.

Zauważ, że ścieżka rejestru do podklucza .NET Framework 1.0 różni się od innych.

Korzystanie z Edytora rejestru (starsze wersje struktury)

  1. W menu Start wybierz polecenie Uruchom, wprowadź regedit, a następnie wybierz przycisk OK.

    Aby uruchomić regedit, musisz mieć poświadczenia administracyjne.

  2. Otwórz podklucz, który odpowiada wersji, którą chcesz sprawdzić. Skorzystaj z tabeli w sekcji Detect .NET Framework 1.0 to 4.0 (Wykrywanie od 1.0 do 4.0).

    Na poniższej ilustracji przedstawiono podklucz i jego wartość wersji dla .NET Framework 3.5.

    Wpis rejestru dla .NET Framework 3.5.

Wykonywanie zapytań dotyczących rejestru przy użyciu kodu (starsze wersje struktury)

Użyj klasy Microsoft.Win32.RegistryKey , aby uzyskać dostęp do HKEY_LOCAL_MACHINE SOFTWARE Microsoft NET Framework Setup \ \ \ \ NDP podklucza w Windows rejestru.

Ważne

Jeśli uruchamiana aplikacja jest 32-bitowa i działa w 64-bitowej Windows, ścieżki rejestru będą inne niż wymienione wcześniej. Rejestr 64-bitowy jest dostępny w podkluczu \ oprogramowania HKEY_LOCAL_MACHINE SOFTWARE \ \ Wow6432Node. Na przykład podklucz rejestru dla programu .NET Framework 3.5 to HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft NET Framework Setup \ \ NDP \ v3.5.

Poniższy przykład umożliwia znalezienie zainstalowanych wersji .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

W przykładzie zostaną wyświetlone dane wyjściowe podobne do następujących:

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

Znajdowanie wersji CLR

Wersja .NET Framework CLR zainstalowana z .NET Framework jest wersjonarowana oddzielnie. Istnieją dwa sposoby wykrywania wersji .NET Framework CLR:

  • Narzędzie Clrver.exe narzędzi

    Użyj narzędzia wersji CLR (Clrver.exe), aby określić, które wersje clr są zainstalowane na komputerze. Otwórz Visual Studio wiersz polecenia dla deweloperów lub Visual Studio Developer PowerShell i wprowadź clrver .

    Przykładowe dane wyjściowe:

    Versions installed on the machine:
    v2.0.50727
    v4.0.30319
    
  • Klasa Environment

    Ważne

    W .NET Framework 4.5 i nowszych nie używaj właściwości do wykrywania Environment.Version wersji clr. Zamiast tego należy odpytować rejestr zgodnie z opisem w te .NET Framework 4.5 i nowszych.

    1. Wykonywanie zapytania Environment.Version o właściwość w celu pobrania Version obiektu.

      Zwrócony obiekt identyfikuje wersję środowiska uruchomieniowego, które aktualnie System.Version korzysta z kodu. Nie zwraca wersji zestawu ani innych wersji środowiska uruchomieniowego, które mogą być zainstalowane na komputerze.

      W .NET Framework 4, 4.5, 4.5.1 i 4.5.2 reprezentacja ciągu zwróconego obiektu ma Version postać 4.0.30319.xxxxx, gdzie xxxxx jest mniejsze niż 42000. W .NET Framework 4.6 i nowszych ma postać 4.0.30319.42000.

    2. Po obiekcie Version (Wersja) należy go odpytać w następujący sposób:

      • W przypadku identyfikatora wersji głównych (na przykład 4 dla wersji 4.0) użyj Version.Major właściwości .

      • Jako pomocniczego identyfikatora wydania (na przykład 0 dla wersji 4.0) użyj Version.Minor właściwości .

      • Dla całego ciągu wersji (na przykład 4.0.30319.18010) użyj Version.ToString metody . Ta metoda zwraca pojedynczą wartość, która odzwierciedla wersję środowiska uruchomieniowego wykonującego kod. Nie zwraca wersji zestawu ani innych wersji środowiska uruchomieniowego, które mogą być zainstalowane na komputerze.

    W poniższym przykładzie użyto Environment.Version właściwości , aby pobrać informacje o wersji clr:

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

    W przykładzie zostaną wyświetlone dane wyjściowe podobne do następujących:

    Version: 4.0.30319.18010
    

Zobacz też