Procedura: Determinare le versioni di .NET Framework installate

Gli utenti possono installare ed eseguire più versioni di .NET Framework nei computer. Quando si sviluppa o si distribuisce l'app, potrebbe essere necessario conoscere quali versioni di .NET Framework vengono installate nel computer dell'utente. Il Registro di sistema contiene un elenco delle versioni di .NET Framework installate nel computer.

Nota

Questo articolo è specifico di .NET Framework. Per determinare quali SDK e .NET Core e .NET 5+ sono installati, vedere Come verificare che .NET sia già installato.

.NET Framework è costituito da due componenti principali, che vengono versione separatamente:

  • Un set di assembly, ovvero raccolte di tipi e risorse che forniscono la funzionalità per le app. .NET Framework e gli assembly condividono lo stesso numero di versione. Ad esempio, le versioni di .NET Framework includono 4.5, 4.6.1 e 4.7.2.

  • Common Language Runtime (CLR), che gestisce ed esegue il codice dell'app In genere una singola versione di CLR supporta più versioni di .NET Framework. Ad esempio, CLR versione 4.0.30319. xxxxx dove xxxxx è minore di 42000, supporta le versioni di .NET Framework da 4 a 4.5.2. La versione CLR maggiore o uguale a 4.0.30319.42000 supporta le versioni di .NET Framework a partire da .NET Framework 4.6.

Gli strumenti gestiti dalla community sono disponibili per rilevare le versioni di .NET Framework installate:

Per informazioni sul rilevamento degli aggiornamenti installati per ogni versione di .NET Framework, vedere Procedura: Determinare gli aggiornamenti di .NET Framework installati.

Determinare l'implementazione e la versione di un'app in esecuzione in .NET

È possibile usare la RuntimeInformation.FrameworkDescription proprietà per eseguire query su cui è in esecuzione l'implementazione e la versione di .NET in cui è in esecuzione l'app. Se l'app è in esecuzione in .NET Framework, l'output sarà simile a:

.NET Framework 4.8.4250.0

Per confronto, se l'app è in esecuzione in .NET Core o .NET 5+, l'output sarà simile a:

.NET Core 3.1.9
.NET 5.0.0

Rilevare .NET Framework 4.5 e versioni successive

La versione di .NET Framework (4.5 e versioni successive) installata in un computer è elencata nel Registro di sistema in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full. Se la sottochiave completa manca, .NET Framework 4.5 o versione successiva non è installata.

Nota

La sottochiave di installazione di NET Framework nel percorso del Registro di sistema non inizia con un periodo.

Il valore Release REG_DWORD nel Registro di sistema rappresenta la versione di .NET Framework installata.

Versione di .NET Framework Valore della versione
.NET Framework 4.5 Tutti i sistemi operativi Windows: 378389
.NET Framework 4.5.1 In Windows 8.1 e Windows Server 2012 R2: 378675
In tutti gli altri sistemi operativi Windows: 378758
.NET Framework 4.5.2 Tutti i sistemi operativi Windows: 379893
.NET framework 4.6 In Windows 10: 393295
In tutti gli altri sistemi operativi Windows: 393297
.NET Framework 4.6.1 Nei sistemi Windows 10 con aggiornamento di novembre: 394254
In tutti gli altri sistemi operativi Windows (inclusi Windows 10): 394271
.NET Framework 4.6.2 Nell'Aggiornamento dell'anniversario di Windows 10 e in Windows Server 2016: 394802
In tutti gli altri sistemi operativi Windows (inclusi altri sistemi operativi Windows 10): 394806
.NET Framework 4.7 In Windows 10 Creators Update: 460798
In tutti gli altri sistemi operativi Windows (inclusi altri sistemi operativi Windows 10): 460805
.NET Framework 4.7.1 In Windows 10 Fall Creators Update e Windows Server versione 1709: 461308
In tutti gli altri sistemi operativi Windows (inclusi altri sistemi operativi Windows 10): 461310
.NET Framework 4.7.2 Windows 10 aprile 2018 Update e Windows Server versione 1803: 461808
In tutti i sistemi operativi Windows diversi da Windows 10 aprile 2018 Update e Windows Server, versione 1803: 461814
.NET Framework 4.8 Aggiornamento Aggiornamento di Windows 10 (maggio 2019) e Windows 10 novembre 2019: 528040
Aggiornamento Windows 10 maggio 2020, aggiornamento di ottobre 2020, aggiornamento di maggio 2021, aggiornamento di novembre 2021 e aggiornamento 2022: 528372
In Windows 11 e Windows Server 2022: 528449
In tutti gli altri sistemi operativi Windows (inclusi altri sistemi operativi Windows 10): 528049
.NET Framework 4.8.1 In Windows 11 2022 Update: 533320
Tutti gli altri sistemi operativi Windows: 533325

Versione minima

Per determinare se è presente una versione minima di .NET Framework, verificare la presenza di un valore Release REG_DWORD maggiore o uguale al valore corrispondente elencato nella tabella seguente. Ad esempio, se l'applicazione viene eseguita in .NET Framework 4.8 o versione successiva, testare un valore release REG_DWORD maggiore o uguale a 528040.

Versione di .NET Framework Valore minimo
.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

Usare l'editor del Registro di sistema

  1. Dal menu Start scegliere Esegui, immettere regedit e quindi selezionare OK.

    È necessario disporre delle credenziali amministrative per eseguire regedit.

  2. Nell'editor del Registro di sistema aprire la sottochiave seguente: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full. Se la sottochiave completa non è presente, non è installato .NET Framework 4.5 o versione successiva.

  3. Verificare la presenza di una voce REG_DWORD denominata Release. Se esiste, è installato .NET Framework 4.5 o versione successiva. Il valore corrisponde a una determinata versione di .NET Framework. Nella figura seguente, ad esempio, il valore della voce Release è 528040, ovvero la chiave di versione per .NET Framework 4.8.

    Voce del Registro di sistema per .NET Framework 4.5

Usare PowerShell per verificare la versione minima

Usare i comandi PowerShell per verificare il valore della voce Release della sottochiave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full.

Gli esempi seguenti controllano il valore della voce Release per determinare se .NET Framework 4.6.2 o versione successiva è installato. Questo codice restituisce True se è installato e False in caso contrario.

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

Eseguire query sul Registro di sistema usando il codice

  1. Usare i metodi RegistryKey.OpenBaseKey e RegistryKey.OpenSubKey per accedere alla sottochiave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full nel Registro di sistema di Windows.

    Importante

    Se l'app in esecuzione è a 32 bit ed è in esecuzione in Windows a 64 bit, i percorsi del Registro di sistema saranno diversi rispetto a quelli elencati in precedenza. Il Registro di sistema a 64 bit è disponibile nella sottochiave HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ . Ad esempio, la sottochiave del Registro di sistema per .NET Framework 4.5 è HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full.

  2. Controllare il valore Release REG_DWORD per determinare la versione installata. Affinché sia compatibile con la versione attualmente installata, è possibile cercare un valore maggiore o uguale ai valori elencati nella tabella delle versioni di .NET Framework.

Nell'esempio seguente viene controllato il valore della voce Release nel Registro di sistema per trovare le versioni di .NET Framework 4.5-4.8 installate.

Suggerimento

Aggiungere la direttiva using Microsoft.Win32 o Imports Microsoft.Win32 nella parte superiore del file di codice se non è già stato fatto.

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

Nell'esempio viene visualizzato l'output simile al seguente:

.NET Framework Version: 4.6.1

Questo esempio segue la procedura consigliata per il controllo della versione:

  • Verifica se il valore della voce Release è maggiore o uguale al valore delle parole chiave Release note.
  • Controlla in ordine dalla versione più recente a quella meno recente.

Rilevare .NET Framework 1.0 fino a 4.0

Ogni versione di .NET Framework da 1.1 a 4.0 è elencata come sottochiave in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP. La tabella seguente elenca il percorso di ogni versione di .NET Framework. Per la maggior parte delle versioni, è disponibile un valore Install REG_DWORD di 1 per indicare che questa versione è installata. In queste sottochiavi è disponibile anche un valore Version REG_SZ contenente una stringa di versione.

Nota

La sottochiave di installazione di NET Framework nel percorso del Registro di sistema non inizia con un periodo.

Versione del framework Sottochiave del Registro di sistema valore
1,0 HKLM\Software\Microsoft\. NETFramework\Policy\v1.0\3705 Installare REG_SZ uguali 1
1.1 HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.43222 Installare REG_DWORD uguali 1
2.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727 Installare REG_DWORD uguali 1
3.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup InstallSuccess REG_DWORD uguali 1
3,5 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5 Installare REG_DWORD uguali 1
Profilo client 4.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client Installare REG_DWORD uguali 1
4.0 Profilo completo HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full Installare REG_DWORD uguali 1

Importante

Se l'app in esecuzione è a 32 bit ed è in esecuzione in Windows a 64 bit, i percorsi del Registro di sistema saranno diversi rispetto a quelli elencati in precedenza. Il Registro di sistema a 64 bit è disponibile nella sottochiave HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ . Ad esempio, la sottochiave del Registro di sistema per .NET Framework 3.5 è HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5.

Si noti che il percorso del Registro di sistema per la sottochiave .NET Framework 1.0 è diverso da quello degli altri.

Usare l'editor del Registro di sistema (versioni precedenti del framework)

  1. Dal menu Start scegliere Esegui, immettere regedit e quindi selezionare OK.

    Per eseguire regedit, è necessario avere le credenziali amministrative.

  2. Aprire la sottochiave corrispondente alla versione da controllare. Usare la tabella nella sezione Rileva .NET Framework 1.0 fino a 4.0 .

    Nella figura seguente viene illustrata la sottochiave e il relativo valore Version per .NET Framework 3.5.

    Voce del Registro di sistema per .NET Framework 3.5.

Eseguire query sul Registro di sistema usando il codice (versioni precedenti del framework)

Usare la Microsoft.Win32.RegistryKey classe per accedere alla sottochiaveHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP nel Registro di sistema di Windows.

Importante

Se l'app in esecuzione è a 32 bit ed è in esecuzione in Windows a 64 bit, i percorsi del Registro di sistema saranno diversi rispetto a quelli elencati in precedenza. Il Registro di sistema a 64 bit è disponibile nella sottochiave HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ . Ad esempio, la sottochiave del Registro di sistema per .NET Framework 3.5 è HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5.

Nell'esempio seguente vengono trovate le versioni di .NET Framework 1-4 installate:

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

Nell'esempio viene visualizzato un output simile al seguente:

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

Trovare le versioni di CLR

.NET Framework CLR installato con .NET Framework viene eseguito separatamente. Esistono due modi per rilevare la versione di .NET Framework CLR:

  • Strumento Clrver.exe

    Usare lo strumento CLR Version (Clrver.exe) per determinare quali versioni del CLR vengono installate in un computer. Aprire il prompt dei comandi per sviluppatori di Visual Studio o Visual Studio Developer PowerShell e immettere clrver.

    Output di esempio:

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

    Importante

    Per .NET Framework 4.5 e versioni successive, non usare la Environment.Version proprietà per rilevare la versione di CLR. Eseguire invece query sul Registro di sistema come descritto in Rileva .NET Framework 4.5 e versioni successive.

    1. Eseguire la query per la proprietà Environment.Version per recuperare un oggetto Version.

      L'oggetto System.Version identifica la versione del runtime che esegue attualmente il codice. Non restituisce le versioni di assembly o altre versioni del runtime che potrebbero essere state installate nel computer.

      Per .NET Framework versioni 4, 4.5, 4.5.1 e 4.5.2, la rappresentazione stringa dell'oggetto restituito Version ha il formato 4.0.30319. xxxxx, dove xxxxx è minore di 42000. Per .NET Framework 4.6 e versioni successive, ha il formato 4.0.30319.42000.

    2. Dopo aver ottenuto l'oggetto Version , eseguirne una query come indicato di seguito:

      • Per l'identificatore della versione principale (ad esempio, 4 per la versione 4.0), usare la proprietà Version.Major.

      • Per l'identificatore della versione secondaria (ad esempio, 0 per la versione 4.0), usare la proprietà Version.Minor.

      • Per l'intera stringa di versione (ad esempio, 4.0.30319.18010), usare il metodo Version.ToString. Questo metodo restituisce un valore singolo che riflette la versione del runtime che esegue il codice. Non restituisce le versioni di assembly o altre versioni del runtime che potrebbero essere installate nel computer.

    L'esempio seguente usa la proprietà Environment.Version per recuperare le informazioni sulla versione di CLR:

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

    Nell'esempio viene visualizzato un output simile al seguente:

    Version: 4.0.30319.18010
    

Vedi anche