Procedimiento para determinar qué versiones de .NET Framework están instaladas

Los usuarios pueden instalar y ejecutar varias versiones de .NET Framework en sus equipos. Al desarrollar o implementar una aplicación, es posible que necesite conocer las versiones de .NET Framework que están instaladas en el equipo del usuario. El registro contiene una lista de las versiones de .NET Framework instaladas en el equipo.

Nota

Este artículo es específico de .NET Framework. Para determinar los SDK y entornos de ejecución de .NET Core y .NET 5, y versiones posteriores, que están instalados, vea Cómo comprobar que .NET Core ya está instalado.

.NET Framework está formado por dos componentes principales con versiones separadas:

  • Un conjunto de ensamblados, que son colecciones de tipos y recursos que proporcionan funciones a las aplicaciones. .NET Framework y los ensamblados comparten el mismo número de versión. Por ejemplo, las versiones de .NET Framework incluyen 4.5, 4.6.1 y 4.7.2.

  • Common Language Runtime (CLR), que administra y ejecuta el código de la aplicación. Normalmente, una misma versión de CLR admite varias versiones de .NET Framework. Por ejemplo, la versión de CLR 4.0.30319.xxxxx donde xxxxx es inferior a 42000, admite las versiones 4 a la 4.5.2 de .NET Framework. La versión de CLR mayor o igual que 4.0.30319.42000 admite las versiones de .NET Framework a partir de .NET Framework 4.6.

La comunidad ha creado herramientas que ayudan a detectar qué versiones de .NET Framework están instaladas:

Para obtener información sobre cómo detectar las actualizaciones instaladas de cada versión de .NET Framework, vea Procedimiento para Determinar las actualizaciones de .NET Framework que están instaladas.

Determinación de la implementación y versión de .NET en la que se ejecuta una aplicación

Puede usar la propiedad RuntimeInformation.FrameworkDescription para consultar la implementación y versión de .NET en la que se ejecuta la aplicación. Si la aplicación se ejecuta en .NET Framework, la salida será similar a la siguiente:

.NET Framework 4.8.4250.0

En cambio, si la aplicación se ejecuta en .NET Core o .NET 5 y versiones posteriores, la salida será similar a la siguiente:

.NET Core 3.1.9
.NET 5.0.0

Detección de .NET Framework 4.5 y versiones posteriores

La versión de .NET Framework (4.5 y posteriores) instalada en un equipo se muestra en el Registro, en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\V4\Full. Si falta la subclave Full, significa que .NET Framework 4.5 o superior no está instalado.

Nota

La carpeta NET Framework Setup del Registro no comienza con un punto.

El valor REG_DWORD de Release del Registro representa la versión de .NET Framework que está instalada.

Versión de .NET Framework Valor de Release
.NET Framework 4.5 Todos los sistemas operativos Windows: 378389
.NET Framework 4.5.1 En Windows 8.1 y Windows Server 2012 R2: 378675
En todos los demás sistemas operativos Windows: 378758
.NET Framework 4.5.2 Todos los sistemas operativos Windows: 379893
.NET Framework 4.6 En Windows 10: 393295
En todos los demás sistemas operativos Windows: 393297
.NET Framework 4.6.1 En sistemas con la actualización de noviembre de Windows 10: 394254
En todos los demás sistemas operativos Windows (incluido Windows 10): 394271
.NET Framework 4.6.2 En la Actualización de aniversario de Windows 10 y Windows Server 2016: 394802
En todos los demás sistemas operativos Windows (incluidos otros sistemas operativos Windows 10): 394806
.NET Framework 4.7 En Windows 10 Creators Update: 460798
En todos los demás sistemas operativos Windows (incluidos otros sistemas operativos Windows 10): 460805
.NET Framework 4.7.1 En Windows 10 Fall Creators Update y Windows Server, versión 1709: 461308
En todos los demás sistemas operativos Windows (incluidos otros sistemas operativos Windows 10): 461310
.NET Framework 4.7.2 En la actualización de Windows 10 de abril de 2018 y Windows Server, versión 1803: 461808
En todos los sistemas operativos diferentes de la Actualización de abril de 2018 de Windows 10 y Windows Server, versión 1803: 461814
.NET Framework 4.8 En la actualización de Windows 10 de mayo de 2019 y en la de noviembre de 2019: 528040
En la actualización de Windows 10 de mayo de 2020 y en la de octubre de 2020: 528372
En todos los demás sistemas operativos Windows (incluidos otros sistemas operativos Windows 10): 528049

Versión mínima

Para determinar si hay una versión mínima de .NET Framework, busque un valor REG_DWORD de Release mayor o igual que el valor correspondiente que se muestra en la tabla siguiente. Por ejemplo, si la aplicación se ejecuta en .NET Framework 4.8 o en una versión posterior, pruebe un valor REG_DWORD de Release que sea mayor o igual que 528040.

Versión de .NET Framework Valor mínimo
.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

Uso del Editor del Registro

  1. En el menú Inicio, seleccione Ejecutar, escriba regedit y haga clic en Aceptar.

    (Debe tener credenciales de administrador para ejecutar regedit).

  2. En el Editor del Registro, abra la subclave siguiente: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full. Si la subclave Full no está presente, significa que .NET Framework 4.5 (o una versión posterior) no está instalado.

  3. Busque una entrada REG_DWORD denominada Release. Si existe, significa que tiene instalado .NET Framework 4.5 o una versión posterior. Su valor se corresponde a una versión concreta de .NET Framework. En la ilustración siguiente, por ejemplo, el valor de la entrada Release es 528040, que es la clave de versión de .NET Framework 4.8.

    Entrada del Registro para .NET Framework 4.5

Uso de PowerShell para comprobar si hay una versión mínima

Use comandos de PowerShell para comprobar el valor de la entrada Release de la subclave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full.

En los ejemplos siguientes se comprueba el valor de la entrada Release para determinar si se ha instalado .NET Framework 4.6.2 o una versión posterior. Este código devuelve True si está instalado y False en caso contrario.

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

Consulta del registro mediante código

  1. Use los métodos RegistryKey.OpenBaseKey y RegistryKey.OpenSubKey para acceder a la subclave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full en el Registro de Windows.

    Importante

    Si la aplicación que está ejecutando es de 32 bits y se ejecuta en Windows de 64 bits, las rutas de acceso del Registro serán diferentes de las mostradas anteriormente. El registro de 64 bits está disponible en la subclave HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ . Por ejemplo, la subclave del Registro para .NET Framework 4.5 es HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\V4\Full.

  2. Compruebe el valor REG_DWORD de Release para determinar la versión que está instalada. Para que sea compatible con versiones posteriores, puede buscar un valor mayor o igual que el valor que se muestra en la tabla de versiones de .NET Framework.

En el ejemplo siguiente se comprueba el valor de la entrada Release del Registro para buscar las versiones de .NET Framework 4.5-4.8 que están instaladas:

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";
}
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

En el ejemplo se muestra una salida como la siguiente:

.NET Framework Version: 4.6.1

Este ejemplo sigue la práctica recomendada para la comprobación de versión:

  • Comprueba si el valor de la entrada Release es mayor o igual que el valor de las claves de versión conocidas.
  • Realiza la comprobación en orden, desde la versión más reciente hasta la más antigua.

Detección de .NET Framework 1.0 a 4.0

Cada versión de .NET Framework de 1.1 a 4.0 aparece como una subclave en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP. En la tabla siguiente se muestra la ruta de acceso a cada versión de .NET Framework. Para la mayoría de las versiones, hay un valor REG_DWORD Install de 1 que indica que esta versión está instalada. En estas subclaves, hay también un valor REG_SZ de Version que contiene una cadena de versión.

Nota

La carpeta NET Framework Setup del Registro no comienza con un punto.

Versión de Framework Subclave del Registro Valor
1.0 HKLM\Software\Microsoft\.NETFramework\Policy\v1.0\3705 Install REG_SZ es igual a 1
1.1 HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322 Install REG_DWORD es igual a 1
2.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727 Install REG_DWORD es igual a 1
3.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup InstallSuccess REG_DWORD es igual a 1
3.5 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5 Install REG_DWORD es igual a 1
4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client Install REG_DWORD es igual a 1
4.0 Full Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full Install REG_DWORD es igual a 1

Importante

Si la aplicación que está ejecutando es de 32 bits y se ejecuta en Windows de 64 bits, las rutas de acceso del Registro serán diferentes de las mostradas anteriormente. El registro de 64 bits está disponible en la subclave HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ . Por ejemplo, la subclave del Registro para .NET Framework 3.5 es HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5.

Tenga en cuenta que la ruta de acceso del registro a la subclave de .NET Framework 1.0 es diferente de la de los demás.

Uso del Editor del Registro (versiones anteriores de la plataforma)

  1. En el menú Inicio, seleccione Ejecutar, escriba regedit y haga clic en Aceptar.

    Debe tener credenciales de administrador para ejecutar regedit.

  2. Abra la subclave que coincida con la versión que desea comprobar. Use la tabla de la sección Detección de .NET Framework 1.0 a 4.0.

    En la siguiente ilustración se muestra la subclave y su valor de Version para .NET Framework 3.5.

    Entrada del Registro para .NET Framework 3.5.

Consultar el registro mediante código (versiones anteriores de la plataforma)

Use la clase Microsoft.Win32.RegistryKey para acceder a la subclave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP en el Registro de Windows.

Importante

Si la aplicación que está ejecutando es de 32 bits y se ejecuta en Windows de 64 bits, las rutas de acceso del Registro serán diferentes de las mostradas anteriormente. El registro de 64 bits está disponible en la subclave HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ . Por ejemplo, la subclave del Registro para .NET Framework 3.5 es HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5.

En el ejemplo siguiente se buscan las versiones de .NET Framework 1-4 que están instaladas:

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

En el ejemplo se muestra una salida similar a la siguiente:

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

Búsqueda de versiones de CLR

El CLR de .NET Framework que se instala con .NET Framework tiene versiones independientes. Hay dos maneras de detectar la versión del CLR de .NET Framework:

  • La herramienta Clrver.exe

    Use la herramienta de versión de CLR (Clrver.exe) para determinar qué versiones de CLR están instaladas en un equipo. Abra el Símbolo del sistema para desarrolladores de Visual Studio o PowerShell de Visual Studio para desarrolladores y escriba clrver.

    Resultados del ejemplo:

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

    Importante

    Para .NET Framework 4.5 y versiones posteriores, no use la propiedad Environment.Version para detectar la versión de CLR. En su lugar, consulte el Registro como se describe en Detección de .NET Framework 4.5 y versiones posteriores.

    1. Consulte la propiedad Environment.Version para recuperar un objeto Version.

      El objeto System.Version devuelto identifica la versión de tiempo de ejecución que está ejecutando el código. No devuelve versiones de ensamblado ni otras versiones del runtime que se hayan instalado en el equipo.

      Para las versiones 4, 4.5, 4.5.1 y 4.5.2 de .NET Framework, la representación de cadena del objeto Version devuelto tiene la forma 4.0.30319.xxxxx, donde xxxxx es inferior a 42000. Para .NET Framework 4.6 y versiones posteriores, tiene la forma 4.0.30319.42000.

    2. Una vez que tenga el objeto Version, consúltelo de la manera siguiente:

      • Para el identificador de versión principal (por ejemplo, 4 en la versión 4.0), use la propiedad Version.Major.

      • Para el identificador de versión secundaria (por ejemplo, 0 en la versión 4.0), use la propiedad Version.Minor.

      • Para la cadena de versión completa (por ejemplo, 4.0.30319.18010), use el método Version.ToString. Este método devuelve un valor único que refleja la versión del runtime que está ejecutando el código. No devuelve versiones de ensamblado ni otras versiones del runtime que se hayan instalado en el equipo.

    En el ejemplo siguiente se usa la propiedad Environment.Version para recuperar la información de la versión de CLR:

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

    En el ejemplo se muestra una salida similar a la siguiente:

    Version: 4.0.30319.18010
    

Vea también