Procedura: Determinare le versioni di .NET Framework installateHow to: Determine which .NET Framework versions are installed

Gli utenti possono installare ed eseguire nel computer più versioni di .NET Framework.Users can install and run multiple versions of the .NET Framework on their computers. Quando si sviluppa o si distribuisce l'app, potrebbe essere necessario conoscere quali versioni di .NET Framework sono installate nel computer dell'utente.When you develop or deploy your app, you might need to know which .NET Framework versions are installed on the user’s computer.

.NET Framework è costituito da due componenti principali, le cui versioni sono definite separatamente:The .NET Framework consists of two main components, which are versioned separately:

  • Un set di assembly, ovvero raccolte di tipi e risorse che forniscono la funzionalità per le app.A set of assemblies, which are collections of types and resources that provide the functionality for your apps. .NET Framework e gli assembly condividono lo stesso numero di versione.The .NET Framework and assemblies share the same version number.

  • Common Language Runtime (CLR), che gestisce ed esegue il codice dell'appThe common language runtime (CLR), which manages and executes your app's code. e che viene identificato dal relativo numero di versione (vedere Versioni e dipendenze).The CLR is identified by its own version number (see Versions and Dependencies).

Nota

Ogni nuova versione di .NET Framework conserva funzionalità dalle versioni precedenti e ne aggiunge nuove.Each new version of the .NET Framework retains features from the previous versions and adds new features. È possibile caricare più versioni di .NET Framework in un singolo computer contemporaneamente, il che significa che si può installare .NET Framework senza dover disinstallare le versioni precedenti.You can load multiple versions of the .NET Framework on a single computer at the same time, which means that you can install the .NET Framework without having to uninstall previous versions. In generale, non è necessario disinstallare alcuna versione precedente di .NET Framework, perché un'applicazione in uso potrebbe dipendere da una versione specifica e smettere di funzionare se quella versione viene rimossa.In general, you shouldn't uninstall previous versions of the .NET Framework, because an application you use may depend on a specific version and may break if that version is removed.

Esiste una differenza tra la versione di .NET Framework e la versione di CLR:There is a difference between the .NET Framework version and the CLR version:

  • La versione di .NET Framework è basata sul set di assembly che costituiscono la libreria di classi .NET Framework.The .NET Framework version is based on the set of assemblies that form the .NET Framework class library. Ad esempio, le versioni di .NET Framework includono 4.5, 4.6.1 e 4.7.2.For example, .NET Framework versions include 4.5, 4.6.1, and 4.7.2.
  • La versione di CLR è basata sul runtime in cui vengono eseguite le applicazioni .NET Framework.The CLR version is based on the runtime on which .NET Framework applications execute. In genere una singola versione di CLR supporta più versioni di .NET Framework.A single CLR version typically supports multiple .NET Framework versions. La versione di CLR 4.0.30319.xxxxx, ad esempio, supporta le versioni di .NET Framework da 4 a 4.5.2, in cui xxxxx è inferiore a 42000, e la versione di CLR 4.0.30319.42000 supporta le versioni di .NET Framework a partire da .NET Framework 4.6.For example, CLR version 4.0.30319.xxxxx supports .NET Framework versions 4 through 4.5.2, where xxxxx is less than 42000, and CLR version 4.0.30319.42000 supports .NET Framework versions starting with .NET Framework 4.6.

Per altre informazioni sulle versioni, vedere Versioni e dipendenze di .NET Framework.For more information about versions, see .NET Framework versions and dependencies.

Per ottenere un elenco delle versioni di .NET Framework installate in un computer, accedere al Registro di sistema.To get a list of the .NET Framework versions installed on a computer, you access the registry. È possibile usare l'editor del Registro di sistema per visualizzare il Registro di sistema o eseguire una query tramite codice:You can either use the Registry Editor to view the registry or use code to query it:

Per ottenere un elenco delle versioni di CLR installate in un computer, usare uno strumento o codice:To get a list of the CLR versions installed on a computer, use a tool or code:

Per informazioni sul rilevamento degli aggiornamenti installati per ogni versione di .NET Framework, vedere Procedura: Determinare gli aggiornamenti di .NET Framework installati.For information about detecting the installed updates for each version of the .NET Framework, see How to: Determine which .NET Framework updates are installed.

Trovare le versioni di .NET Framework più recenti (4.5 e successive)Find newer .NET Framework versions (4.5 and later)

Trovare le versioni di .NET Framework 4.5 e successive del Registro di sistemaFind .NET Framework versions 4.5 and later in the registry

  1. Dal menu Start scegliere Esegui, immettere regedit e quindi selezionare OK.From the Start menu, choose Run, enter regedit, and then select OK.

    Per eseguire regedit, è necessario avere le credenziali amministrative.You must have administrative credentials to run regedit.

  2. Nell'Editor del Registro di sistema aprire la seguente sottochiave: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full.In the Registry Editor, open the following subkey: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full. Se la sottochiave Full non è presente, .NET Framework 4.5 o versioni successive non è installato.If the Full subkey isn't present, then you don't have the .NET Framework 4.5 or later installed.

    Nota

    La cartella NET Framework Setup nel Registro di sistema non inizia con un punto.The NET Framework Setup folder in the registry does not begin with a period.

  3. Verificare la presenza di una voce DWORD denominata Release.Check for a DWORD entry named Release. Se esiste, .NET Framework 4.5 o versioni successive è installato.If it exists, then you have .NET Framework 4.5 or later versions installed. Il valore è una chiave di rilascio che corrisponde a una particolare versione di .NET Framework.Its value is a release key that corresponds to a particular version of the .NET Framework. Nella figura seguente, ad esempio, il valore della voce Release è 378389, ovvero la chiave di rilascio per .NET Framework 4.5.In the following figure, for example, the value of the Release entry is 378389, which is the release key for .NET Framework 4.5.

    Voce del Registro di sistema per .NET Framework 4.5Registry entry for the .NET Framework 4.5

La tabella seguente elenca il valore della voce DWORD Release nei singoli sistemi operativi per .NET Framework 4.5 e versioni successive.The following table lists the value of the Release DWORD on individual operating systems for .NET Framework 4.5 and later versions.

Importante

La tabella seguente elenca solo le chiavi delle versioni rilasciate di .NET Framework.The following table lists the keys of released versions of the .NET Framework only. Non vengono elencate le chiavi di versioni di anteprima o non definitive.It doesn't list the keys of preview or pre-release versions.

Versione di .NET Framework.NET Framework version Valore DWORD di ReleaseValue of the Release DWORD
.NET Framework 4.5.NET Framework 4.5 Tutti i sistemi operativi Windows: 378389All Windows operating systems: 378389
.NET Framework 4.5.1.NET Framework 4.5.1 In Windows 8.1 e Windows Server 2012 R2: 378675On Windows 8.1 and Windows Server 2012 R2: 378675
In tutti gli altri sistemi operativi Windows: 378758On all other Windows operating systems: 378758
.NET Framework 4.5.2.NET Framework 4.5.2 Tutti i sistemi operativi Windows: 379893All Windows operating systems: 379893
.NET Framework 4.6.NET Framework 4.6 In Windows 10: 393295On Windows 10: 393295
In tutti gli altri sistemi operativi Windows: 393297On all other Windows operating systems: 393297
.NET Framework 4.6.1.NET Framework 4.6.1 Nei sistemi Windows 10 con aggiornamento di novembre: 394254On Windows 10 November Update systems: 394254
In tutti gli altri sistemi operativi Windows (incluso Windows 10): 394271On all other Windows operating systems (including Windows 10): 394271
.NET Framework 4.6.2.NET Framework 4.6.2 Nell'Aggiornamento dell'anniversario di Windows 10 e in Windows Server 2016: 394802On Windows 10 Anniversary Update and Windows Server 2016: 394802
In tutti gli altri sistemi operativi Windows (inclusi altri sistemi operativi Windows 10): 394806On all other Windows operating systems (including other Windows 10 operating systems): 394806
.NET Framework 4.7.NET Framework 4.7 In Windows 10 Creators Update: 460798On Windows 10 Creators Update: 460798
In tutti gli altri sistemi operativi Windows (inclusi altri sistemi operativi Windows 10): 460805On all other Windows operating systems (including other Windows 10 operating systems): 460805
.NET Framework 4.7.1.NET Framework 4.7.1 In Windows 10 Fall Creators Update e Windows Server versione 1709: 461308On Windows 10 Fall Creators Update and Windows Server, version 1709: 461308
In tutti gli altri sistemi operativi Windows (inclusi altri sistemi operativi Windows 10): 461310On all other Windows operating systems (including other Windows 10 operating systems): 461310
.NET Framework 4.7.2.NET Framework 4.7.2 In Windows 10 aggiornamento di aprile 2018 e Windows Server versione 1803: 461808On Windows 10 April 2018 Update and Windows Server, version 1803: 461808
In tutti i sistemi operativi diversi dall'Aggiornamento di Windows 10 (aprile 2018) e da Windows Server, versione 1803: 461814On all Windows operating systems other than Windows 10 April 2018 Update and Windows Server, version 1803: 461814
.NET Framework 4.8.NET Framework 4.8 Aggiornamento di Windows 10 di maggio 2019: 528040On Windows 10 May 2019 Update: 528040
In tutti gli altri sistemi operativi Windows (inclusi altri sistemi operativi Windows 10): 528049On all others Windows operating systems (including other Windows 10 operating systems): 528049

È possibile usare questi valori come indicato di seguito:You can use these values as follows:

  • Per determinare se una versione specifica di .NET Framework è installata in una particolare versione del sistema operativo Windows, verificare se il valore della voce DWORD Release è uguale al valore elencato nella tabella.To determine whether a specific version of the .NET Framework is installed on a particular version of the Windows operating system, test whether the Release DWORD value is equal to the value listed in the table. Ad esempio, per determinare se .NET Framework 4.6 è presente in un sistema Windows 10, verificare se è presente un valore di Release uguale a 393295.For example, to determine whether .NET Framework 4.6 is present on a Windows 10 system, test for the a Release value that is equal to 393295.

  • Per determinare se è presente una versione minima di .NET Framework, usare il valore più piccolo di DWORD RELEASE per tale versione.To determine whether a minimum version of the .NET Framework is present, use the smaller RELEASE DWORD value for that version. Se ad esempio l'applicazione viene eseguita in .NET Framework 4.6 o versione successiva, verificare se è presente un valore della voce DWORD RELEASE maggiore o uguale a 393295.For example, if your application runs under .NET Framework 4.6 or a later version, test for a RELEASE DWORD value that is greater than or equal to 393295. Per una tabella che elenca solo il valore minimo della voce DWORD RELEASE per ogni versione di .NET Framework, vedere Valori minimi della voce DWORD Release per .NET Framework 4.5 e versioni successive.For a table that lists only the minimum RELEASE DWORD value for each .NET Framework version, see The minimum values of the Release DWORD for .NET Framework 4.5 and later versions.

  • Per eseguire questo test per più versioni, iniziare verificando se è presente un valore maggiore o uguale al valore più piccolo di DWORD per la versione più recente di .NET Framework e quindi confrontare tale valore con il valore più piccolo di DWORD per ogni versione meno recente.To test for multiple versions, begin by testing for a value that is greater than or equal to the smaller DWORD value for the latest .NET Framework version, and then compare the value with the smaller DWORD value for each successive earlier version. Se ad esempio l'applicazione richiede .NET Framework 4.7 o versione successiva e si vuole determinare quale versione di .NET Framework è presente, iniziare verificando se è presente un valore della voce DWORD RELEASE maggiore o uguale a 461808 (il valore più piccolo di DWORD per .NET Framework 4.7.2).For example, if your application requires .NET Framework 4.7 or later and you want to determine the specific version of .NET Framework present, start by testing for a RELEASE DWORD value that is great than or equal to to 461808 (the smaller DWORD value for .NET Framework 4.7.2). Confrontare quindi il valore della voce DWORD RELEASE con il valore più piccolo per ogni versione successiva di .NET Framework.Then compare the RELEASE DWORD value with the smaller value for each later .NET Framework version. Per una tabella che elenca solo il valore minimo della voce DWORD RELEASE per ogni versione di .NET Framework, vedere Valori minimi della voce DWORD Release per .NET Framework 4.5 e versioni successive.For a table that lists only the minimum RELEASE DWORD value for each .NET Framework version, see The minimum values of the Release DWORD for .NET Framework 4.5 and later versions.

Trovare le versioni di .NET Framework 4.5 e successive tramite codiceFind .NET Framework versions 4.5 and later with code

  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.Use the RegistryKey.OpenBaseKey and RegistryKey.OpenSubKey methods to access the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full subkey in the Windows registry.

    L'esistenza della voce DWORD Release nella sottochiave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full indica che .NET Framework 4.5 o versioni successive è installato nel computer.The existence of the Release DWORD entry in the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full subkey indicates that the .NET Framework 4.5 or a later version is installed on a computer.

  2. Verificare il valore della voce Release per determinare la versione installata.Check the value of the Release entry to determine the installed version. 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.To be forward-compatible, check for a value greater than or equal to the value listed in the .NET Framework version table.

L'esempio seguente illustra come verificare il valore della voce Release nel Registro di sistema per determinare quale versione di .NET Framework 4.5 e versioni successive è installata:The following example checks the value of the Release entry in the registry to find the .NET Framework 4.5 and later versions that are installed:

using System;
using Microsoft.Win32;

public class GetDotNetVersion
{
   public static void Main()
   {
      Get45PlusFromRegistry();
   }

   private static void Get45PlusFromRegistry()
   {
      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";
      }
   }
}   
// This example displays output like the following:
//       .NET Framework Version: 4.6.1
Imports Microsoft.Win32

Public Module GetDotNetVersion
   Public Sub Main()
      Get45PlusFromRegistry()
   End Sub

   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 
            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 >= will enable forward compatibility.
   Private Function CheckFor45PlusVersion(releaseKey As Integer) As String
      If releaseKey >= 528040 Then
         Return "4.8 or later"
      Else If releaseKey >= 461808 Then
         Return "4.7.2" 
      Else If releaseKey >= 461308 Then
         Return "4.7.1"
      Else If releaseKey >= 460798 Then
         Return "4.7"
      Else If releaseKey >= 394802 Then
         Return "4.6.2"
      Else If releaseKey >= 394254 Then 
         Return "4.6.1"
      Else If releaseKey >= 393295 Then
         Return "4.6"
      Else If releaseKey >= 379893 Then
         Return "4.5.2"
      Else If releaseKey >= 378675 Then
         Return "4.5.1"
      Else If 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
End Module   
' The example displays output like the following:
'       .NET Framework Version: 4.6.1

Questo esempio segue la procedura consigliata per il controllo della versione:This example follows the recommended practice for version checking:

  • Verifica se il valore della voce Release è maggiore o uguale al valore delle parole chiave Release note.It checks whether the value of the Release entry is greater than or equal to the value of the known release keys.

  • Controlla in ordine dalla versione più recente a quella meno recente.It checks in order from most recent version to earliest version.

Verificare la presenza di una versione minima richiesta di .NET Framework (4.5 e versioni successive) con PowerShellCheck for a minimum-required .NET Framework version (4.5 and later) with PowerShell

  • Usare i comandi PowerShell per verificare il valore della voce Release della sottochiave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full.Use PowerShell commands to check the value of the Release entry of the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full subkey.

Gli esempi seguenti illustrano come verificare il valore della voce Release per determinare se .NET Framework 4.6.2 o versioni successive è installato.The following examples check the value of the Release entry to determine whether the .NET Framework 4.6.2 or later is installed. Questo codice restituisce True se è installato e False in caso contrario.This code returns True if it's installed and False otherwise.

# PowerShell 5
 Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\' |  Get-ItemPropertyValue -Name Release | Foreach-Object { $_ -ge 394802 }
# PowerShell 4
(Get-ItemProperty "HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full").Release -ge 394802

Per cercare una versione minima richiesta di .NET Framework diversa, sostituire 394802 in questi esempi con un valore Release della tabella delle versioni di .NET Framework.To check for a different minimum-required .NET Framework version, replace 394802 in these examples with a Release value from the .NET Framework version table.

Trovare le versioni di .NET Framework precedenti (1 - 4)Find older .NET Framework versions (1–4)

Trovare le versioni di .NET Framework da 1 a 4 nel Registro di sistemaFind .NET Framework versions 1–4 in the registry

  1. Dal menu Start scegliere Esegui, immettere regedit e quindi selezionare OK.From the Start menu, choose Run, enter regedit, and then select OK.

    Per eseguire regedit, è necessario avere le credenziali amministrative.You must have administrative credentials to run regedit.

  2. Nell'Editor del Registro di sistema aprire la seguente sottochiave: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP:In the Registry Editor, open the following subkey: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP:

    • Per le versioni di .NET Framework da 1.1 a 3.5, ogni versione installata è elencata come sottochiave nella sottochiave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP.For .NET Framework versions 1.1 through 3.5, each installed version is listed as a subkey under the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP subkey. Ad esempio, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5.For example, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5. Il numero di versione è archiviato come valore nella voce Version della sottochiave della versione.The version number is stored as a value in the version subkey's Version entry.

    • Per .NET Framework 4, la voce Version si trova nella sottochiave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Client, nella sottochiave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Full o in entrambe le sottochiavi.For .NET Framework 4, the Version entry is under the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Client subkey, the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Full subkey, or under both subkeys.

    Nota

    La cartella NET Framework Setup nel Registro di sistema non inizia con un punto.The NET Framework Setup folder in the registry does not begin with a period.

    La figura seguente illustra la sottochiave e la relativa voce Version per .NET Framework 3.5.The following figure shows the subkey and its Version entry for the .NET Framework 3.5.

    Voce del Registro di sistema per .NET Framework 3.5.The registry entry for the .NET Framework 3.5.

Trovare le versioni di .NET Framework da 1 a 4 tramite codiceFind .NET Framework versions 1–4 with code

  • Usare la classe Microsoft.Win32.RegistryKey per accedere alla sottochiave HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP nel Registro di sistema di Windows.Use the Microsoft.Win32.RegistryKey class to access the HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP subkey in the Windows registry.

L'esempio seguente illustra come trovare le versioni .NET Framework da 1 a 4 installate:The following example finds the .NET Framework 1–4 versions that are installed:

using Microsoft.Win32;
using System;

public static class VersionTest
{
    public static void Main()
    {
        GetVersionFromRegistry();
    }
    
    private static void GetVersionFromRegistry()
    {
        // Opens 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, or an empty string if there is none.
                    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 (!(string.IsNullOrEmpty(sp)) && install == "1")
                        {
                            Console.WriteLine($"{versionKeyName}  {name}  SP{sp}");
                        }
                    }
                    if (! string.IsNullOrEmpty(name))
                    {
                        continue;
                    }
                    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 (!(string.IsNullOrEmpty(sp )) && install == "1")
                            {
                                Console.WriteLine($"{subKeyName}  {name}  SP{sp}");
                            }
                            else if (install == "1")
                            {
                                Console.WriteLine($"  {subKeyName}  {name}");
                            }
                        }
                    }
                }
            }
        }
    }
}
// The example displays output similar to the following:
//        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
Imports Microsoft.Win32

Public Module VersionTest
    Public Sub Main()
        GetVersionFromRegistry()
    End Sub
    
    Private Sub GetVersionFromRegistry()

        ' 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}")
                    Else
                        If Not String.IsNullOrEmpty(sp) AndAlso install = "1" Then
                            Console.WriteLine($"{versionKeyName}  {name}  SP{sp}")
                        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}")
                        Else
                            If Not String.IsNullOrEmpty(sp) AndAlso install = "1" Then
                                Console.WriteLine($"{subKeyName}  {name}  SP{sp}")
                            ElseIf install = "1" Then
                                Console.WriteLine($"  {subKeyName}  {name}")
                            End If
                        End If
                    Next
                End If
            Next
        End Using
    End Sub
End Module
' The example displays output similar to the following:
'        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 CLRFind CLR versions

Trovare la versione corrente di CLR con Clrver.exeFind the current CLR version with Clrver.exe

Usare lo strumento della versione CLR (Clrver.exe) per determinare le versioni di CLR installate in un computer:Use the CLR Version tool (Clrver.exe) to determine which versions of the CLR are installed on a computer:

Trovare la versione corrente di CLR con la classe EnvironmentFind the current CLR version with the Environment class

Importante

Per .NET Framework 4.5 e versioni successive, non usare la proprietà Environment.Version per rilevare la versione di CLR.For the .NET Framework 4.5 and later versions, don't use the Environment.Version property to detect the version of the CLR. Eseguire invece una query nel Registro di sistema come descritto in Trovare le versioni di .NET Framework 4.5 e successive tramite codice.Instead, query the registry as described in Find .NET Framework versions 4.5 and later with code.

  1. Eseguire la query per la proprietà Environment.Version per recuperare un oggetto Version.Query the Environment.Version property to retrieve a Version object.

    L'oggetto System.Version identifica la versione del runtime che esegue attualmente il codice.The returned System.Version object identifies the version of the runtime that's currently executing the code. Non restituisce le versioni di assembly o altre versioni del runtime che potrebbero essere state installate nel computer.It doesn't return assembly versions or other versions of the runtime that may have been installed on the computer.

    Per le versioni 4, 4.5, 4.5.1 e 4.5.2 di .NET Framework, la rappresentazione stringa dell'oggetto Version restituito ha il formato 4.0.30319.xxxxx, dove xxxxx è inferiore a 42000.For the .NET Framework versions 4, 4.5, 4.5.1, and 4.5.2, the string representation of the returned Version object has the form 4.0.30319.xxxxx, where xxxxx is less than 42000. Per .NET Framework 4.6 e versioni successive, ha il formato 4.0.30319.42000.For the .NET Framework 4.6 and later versions, it has the form 4.0.30319.42000.

  2. Dopo aver ottenuto l'oggetto Version, eseguire una query come indicato di seguito:After you have the Version object, query it as follows:

    • Per l'identificatore della versione principale (ad esempio, 4 per la versione 4.0), usare la proprietà Version.Major.For the major release identifier (for example, 4 for version 4.0), use the Version.Major property.

    • Per l'identificatore della versione secondaria (ad esempio, 0 per la versione 4.0), usare la proprietà Version.Minor.For the minor release identifier (for example, 0 for version 4.0), use the Version.Minor property.

    • Per l'intera stringa di versione (ad esempio, 4.0.30319.18010), usare il metodo Version.ToString.For the entire version string (for example, 4.0.30319.18010), use the Version.ToString method. Questo metodo restituisce un valore singolo che riflette la versione del runtime che esegue il codice.This method returns a single value that reflects the version of the runtime that's executing the code. Non restituisce le versioni di assembly o altre versioni del runtime che potrebbero essere installate nel computer.It doesn't return assembly versions or other runtime versions that may be installed on the computer.

L'esempio seguente usa la proprietà Environment.Version per recuperare le informazioni sulla versione di CLR:The following example uses the Environment.Version property to retrieve CLR version information:

using System;

public class VersionTest
{
    public static void Main()
    {
        Console.WriteLine($"Version: {Environment.Version}");
    }
}
// The example displays output similar to the following:'
//    Version: 4.0.30319.18010
Imports Microsoft.Win32

Public Module VersionTest
   Public Sub Main()
      GetVersionFromEnvironment()
   End Sub
   
    Private Sub GetVersionFromEnvironment()
        Console.WriteLine($"Version: {Environment.Version}")
    End Sub
End Module
' The example displays output similiar to the following:'
'    Version: 4.0.30319.18010

Vedere ancheSee also