Plataformas de destino en proyectos de estilo SDKTarget frameworks in SDK-style projects

Cuando se dirige a un marco en una aplicación o biblioteca, debe especificar el conjunto de API que quiere poner a disposición de la aplicación o biblioteca.When you target a framework in an app or library, you're specifying the set of APIs that you'd like to make available to the app or library. La plataforma de destino se especifica en el archivo del proyecto mediante un moniker de la plataforma de destino (TFM).You specify the target framework in your project file using a target framework moniker (TFM).

Una aplicación o biblioteca puede tener como destino una versión de .NET Standard.An app or library can target a version of .NET Standard. Las versiones de .NET Standard representan conjuntos estandarizados de API en todas las implementaciones de .NET..NET Standard versions represent standardized sets of APIs across all .NET implementations. Por ejemplo, una biblioteca puede tener como destino .NET Standard 1.6 y obtener acceso a las API que funcionan en .NET Core y .NET Framework con el mismo código base.For example, a library can target .NET Standard 1.6 and gain access to APIs that function across .NET Core and .NET Framework using the same codebase.

Una aplicación o biblioteca también puede tener como destino una implementación específica de .NET para obtener acceso a las API específicas de la implementación.An app or library can also target a specific .NET implementation to gain access to implementation-specific APIs. Por ejemplo, una aplicación que tenga como destino Xamarin.iOS (por ejemplo, Xamarin.iOS10) tiene acceso a contenedores de API de iOS proporcionados por Xamarin para iOS 10, o una aplicación que tenga como destino la Plataforma universal de Windows (UWP, uap10.0) tiene acceso a las API que compilan para dispositivos que ejecutan Windows 10.For example, an app that targets Xamarin.iOS (for example, Xamarin.iOS10) has access to Xamarin-provided iOS API wrappers for iOS 10, or an app that targets Universal Windows Platform (UWP, uap10.0) has access to APIs that compile for devices that run Windows 10.

Para algunas plataformas de destino (por ejemplo, .NET Framework), las API se definen mediante los ensamblados que la plataforma instala en un sistema y pueden incluir API del marco de trabajo de la aplicación (por ejemplo, ASP.NET).For some target frameworks, such as .NET Framework, the APIs are defined by the assemblies that the framework installs on a system and may include application framework APIs (for example, ASP.NET).

Para plataformas de destino basadas en paquetes (por ejemplo, .NET 5, .NET Standard y .NET Core), las API se definen mediante los paquetes NuGet incluidos en la aplicación o biblioteca.For package-based target frameworks (for example, .NET 5, .NET Core, and .NET Standard), the APIs are defined by the NuGet packages included in the app or library.

Últimas versionesLatest versions

En la tabla siguiente se definen las plataformas de destino más comunes, cómo se hace referencia a ellas y la versión de .NET Standard que implementan.The following table defines the most common target frameworks, how they're referenced, and which version of .NET Standard they implement. Estas versiones de plataformas de destino son las últimas versiones estables.These target framework versions are the latest stable versions. No se muestran las versiones preliminares.Pre-release versions aren't shown. Un moniker de la plataforma de destino (TFM) es un formato de token normalizado para especificar la plataforma de destino de una aplicación o biblioteca de .NET.A target framework moniker (TFM) is a standardized token format for specifying the target framework of a .NET app or library.

Marco de destinoTarget framework LatestLatest
versión establestable version
Moniker de la plataforma de destino (TFM)Target framework moniker (TFM) ImplementadoImplemented
versión de .NET Standard.NET Standard version
.NET 5.NET 5 5.05.0 net5.0net5.0 N/DN/A
.NET Standard.NET Standard 2.12.1 netstandard2.1netstandard2.1 N/DN/A
.NET Core.NET Core 3.13.1 netcoreapp3.1netcoreapp3.1 2.12.1
.NET Framework.NET Framework 4.84.8 net48net48 2.02.0

Plataformas de destino admitidasSupported target frameworks

Normalmente, un TFM hace referencia a una plataforma de destino.A target framework is typically referenced by a TFM. En la tabla siguiente, se muestran las plataformas de destino compatibles con el SDK de .NET y el cliente de NuGet.The following table shows the target frameworks supported by the .NET SDK and the NuGet client. Los equivalentes se muestran entre corchetes.Equivalents are shown within brackets. Por ejemplo, win81 es un TFM equivalente a netcore451.For example, win81 is an equivalent TFM to netcore451.

Versión de .NET Framework de destinoTarget Framework TFMTFM
.NET 5+ (y .NET Core).NET 5+ (and .NET Core) netcoreapp1.0netcoreapp1.0
netcoreapp1.1netcoreapp1.1
netcoreapp2.0netcoreapp2.0
netcoreapp2.1netcoreapp2.1
netcoreapp2.2netcoreapp2.2
netcoreapp3.0netcoreapp3.0
netcoreapp3.1netcoreapp3.1
net5.0
net6.0
net5.0
net6.0
.NET Standard.NET Standard netstandard1.0netstandard1.0
netstandard1.1netstandard1.1
netstandard1.2netstandard1.2
netstandard1.3netstandard1.3
netstandard1.4netstandard1.4
netstandard1.5netstandard1.5
netstandard1.6netstandard1.6
netstandard2.0netstandard2.0
netstandard2.1netstandard2.1
.NET Framework.NET Framework net11net11
net20net20
net35net35
net40net40
net403net403
net45net45
net451net451
net452net452
net46net46
net461net461
net462net462
net47net47
net471net471
net472net472
net48net48
Tienda WindowsWindows Store netcore [netcore45]netcore [netcore45]
netcore45 [win] [win8]netcore45 [win] [win8]
netcore451 [win81]netcore451 [win81]
.NET Micro Framework.NET Micro Framework netmfnetmf
SilverlightSilverlight sl4sl4
sl5sl5
Windows PhoneWindows Phone wp [wp7]wp [wp7]
wp7wp7
wp75wp75
wp8wp8
wp81wp81
wpa81wpa81
Plataforma universal de WindowsUniversal Windows Platform uap [uap10.0]uap [uap10.0]
uap10.0 [win10] [netcore50]uap10.0 [win10] [netcore50]

* Los TFM de .NET 5 y versiones posteriores incluyen variaciones específicas del sistema operativo.* .NET 5 and later TFMs include some operating system-specific variations. Para obtener más información, vea la sección siguiente TFM específicos del sistema operativo de .NET 5+.For more information, see the following section, .NET 5+ OS-specific TFMs.

TFM específicos del sistema operativo de .NET 5.NET 5+ OS-specific TFMs

Los TFM net5.0 y net6.0 incluyen tecnologías que funcionan en distintas plataformas.The net5.0 and net6.0 TFMs include technologies that work across different platforms. La especificación de un TFM específico del sistema operativo hace que las API concretas de un sistema operativo estén disponibles para la aplicación, por ejemplo, Windows Forms o enlaces de iOS.Specifying an OS-specific TFM makes APIs that are specific to an operating system available to your app, for example, Windows Forms or iOS bindings. Los TFM específicos del sistema operativo también heredan todas las API disponibles para el TFM base, por ejemplo, el TFM net5.0.OS-specific TFMs also inherit every API available to their base TFM, for example, the net5.0 TFM.

En .NET 5 se ha presentado el TFM específico del sistema operativo net5.0-windows, que incluye enlaces específicos de Windows para las API de WinForms, WPF y UWP..NET 5 introduced the net5.0-windows OS-specific TFM, which includes Windows-specific bindings for WinForms, WPF, and UWP APIs. En .NET 6 se presentan más TFM específicos del sistema operativo..NET 6 introduces further OS-specific TFMs.

En la tabla siguiente se muestra la compatibilidad de los TFM de .NET 5.The following table shows the compatibility of the .NET 5+ TFMs.

TFMTFM Compatible conCompatible with
net5.0net5.0 net1.4 (con la advertencia NU1701)net1..4 (with NU1701 warning)
netcoreapp1.3.1 (advertencia cuando se hace referencia a WinForms o WPF)netcoreapp1..3.1 (warning when WinForms or WPF is referenced)
netstandard1.2.1netstandard1..2.1
net5.0-windowsnet5.0-windows netcoreapp1.3.1 (más todo lo demás heredado de net5.0)netcoreapp1..3.1 (plus everything else inherited from net5.0)
net6.0net6.0 (versión posterior de net5.0)(subsequent version of net5.0)
net6.0-androidnet6.0-android xamarin.android (más todo lo demás heredado de net6.0)xamarin.android (+everything else inherited from net6.0)
net6.0-iosnet6.0-ios xamarin.ios (más todo lo demás heredado de net6.0)xamarin.ios (+everything else inherited from net6.0)
net6.0-macosnet6.0-macos xamarin.mac (más todo lo demás heredado de net6.0)xamarin.mac (+everything else inherited from net6.0)
net6.0-maccatalystnet6.0-maccatalyst xamarin.ios (más todo lo demás heredado de net6.0)xamarin.ios (+everything else inherited from net6.0)
net6.0-tvosnet6.0-tvos xamarin.tvos (más todo lo demás heredado de net6.0)xamarin.tvos (+everything else inherited from net6.0)
net6.0-windowsnet6.0-windows (versión posterior de net5.0-windows)(subsequent version of net5.0-windows)

Para que la aplicación sea portable entre distintas plataformas pero todavía tenga acceso a API específicas del sistema operativo, puede seleccionar como destino varios TFM específicos del sistema operativo y agregar restricciones de plataforma alrededor de llamadas API específicas del sistema operativo mediante directivas de preprocesador #if.To make your app portable across different platforms but still have access to OS-specific APIs, you can target multiple OS-specific TFMs and add platform guards around OS-specific API calls using #if preprocessor directives.

Destinos sugeridosSuggested targets

Siga estas instrucciones para determinar qué TFM usar en la aplicación:Use these guidelines to determine which TFM to use in your app:

  • Las aplicaciones que se pueden trasladar a varias plataformas deben tener como destino un TFM base, como net5.0.Apps that are portable to multiple platforms should target a base TFM, for example, net5.0. Esto incluye la mayoría de las bibliotecas, pero también ASP.NET Core y Entity Framework.This includes most libraries but also ASP.NET Core and Entity Framework.

  • Las bibliotecas específicas de la plataforma deben tener como destino tipos específicos de la plataforma.Platform-specific libraries should target platform-specific flavors. Por ejemplo, los proyectos de WinForms y WPF deben tener como destino net5.0-windows o net6.0-windows.For example, WinForms and WPF projects should target net5.0-windows or net6.0-windows.

  • Los modelos de aplicación multiplataforma (Xamarin Forms, ASP.NET Core) y los paquetes puente (Xamarin Essentials) deben tener como destino el TFM base como mínimo (por ejemplo net6.0), pero también otros tipos específicos de la plataforma para obtener más API o características.Cross-platform application models (Xamarin Forms, ASP.NET Core) and bridge packs (Xamarin Essentials) should at least target the base TFM, for example, net6.0, but might also target additional platform-specific flavors to light-up more APIs or features.

Versión del sistema operativo en los TFMOS version in TFMs

También puede especificar una versión opcional del sistema operativo al final del TFM, por ejemplo, net6.0-ios13.0, que indica qué API están disponibles para la aplicación.You can also specify an optional OS version at the end of the TFM, for example, net6.0-ios13.0, which indicates what APIs are available to your app. (El SDK de .NET correspondiente se actualizará para incluir compatibilidad con las versiones más recientes del sistema operativo a medida que se publiquen). Para obtener acceso a las API recién publicadas, incremente la versión del sistema operativo en el TFM.(The corresponding .NET SDK will be updated to include support for newer OS versions as they are released.) To gain access to newly released APIs, increment the OS version in the TFM. Todavía puede hacer que la aplicación sea compatible con versiones anteriores del sistema operativo (y agregar restricciones. en torno a las llamadas a API de versiones posteriores) si agrega el elemento SupportedOSPlatformVersion al archivo del proyecto.You can still make your app compatible with earlier OS versions (and add guards around calls to later-version APIs) by adding the SupportedOSPlatformVersion element to your project file. El elemento SupportedOSPlatformVersion indica la versión mínima del sistema operativo necesaria para ejecutar la aplicación.The SupportedOSPlatformVersion element indicates the minimum OS version required to run your app.

Por ejemplo, el siguiente extracto de archivo del proyecto especifica que las API de iOS 14 están disponibles para la aplicación, pero se puede ejecutar en equipos con iOS 13 o versiones posteriores.For example, the following project file excerpt specifies that iOS 14 APIs are available to the app, but it can run on iOS 13 or later machines.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net6.0-ios14.0</TargetFramework>
    <SupportedOSPlatformVersion>13.0</SupportedOSPlatformVersion> (minimum os platform version)
  </PropertyGroup>

  ...

</Project>

Procedimiento para especificar una plataforma de destinoHow to specify a target framework

Las plataformas de destino se especifican en un archivo del proyecto.Target frameworks are specified in a project file. Cuando especifique una única plataforma de destino, use el elemento TargetFramework.When a single target framework is specified, use the TargetFramework element. En el siguiente archivo de proyecto de aplicación de consola se muestra cómo elegir como destino .NET 5.0:The following console app project file demonstrates how to target .NET 5.0:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

</Project>

Al especificar varias plataformas de destino, puede hacer referencia de forma condicional a ensamblados para cada plataforma de destino.When you specify multiple target frameworks, you may conditionally reference assemblies for each target framework. En el código, puede compilar de forma condicional en esos ensamblados utilizando símbolos de preprocesador con lógica if-then-else.In your code, you can conditionally compile against those assemblies by using preprocessor symbols with if-then-else logic.

El siguiente proyecto de biblioteca tiene como destino las API de .NET Standard (netstandard1.4) y de .NET Framework (net40 y net45).The following library project targets APIs of .NET Standard (netstandard1.4) and .NET Framework (net40 and net45). Use el elemento TargetFrameworks plural con varias plataformas de destino.Use the plural TargetFrameworks element with multiple target frameworks. Los atributos Condition incluyen paquetes específicos de la implementación cuando se compila la biblioteca para los dos TFM de .NET Framework:The Condition attributes include implementation-specific packages when the library is compiled for the two .NET Framework TFMs:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netstandard1.4;net40;net45</TargetFrameworks>
  </PropertyGroup>

  <!-- Conditionally obtain references for the .NET Framework 4.0 target -->
  <ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
    <Reference Include="System.Net" />
  </ItemGroup>

  <!-- Conditionally obtain references for the .NET Framework 4.5 target -->
  <ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Threading.Tasks" />
  </ItemGroup>

</Project>

Dentro de su aplicación o biblioteca, puede escribir código condicional mediante directivas de preprocesador para compilar para cada plataforma de destino:Within your library or app, you write conditional code using preprocessor directives to compile for each target framework:

public class MyClass
{
    static void Main()
    {
#if NET40
        Console.WriteLine("Target framework: .NET Framework 4.0");
#elif NET45
        Console.WriteLine("Target framework: .NET Framework 4.5");
#else
        Console.WriteLine("Target framework: .NET Standard 1.4");
#endif
    }
}

El sistema de compilación es consciente de los símbolos de preprocesador que representan las plataformas de destino que se muestran en la tabla Versiones compatibles de las plataformas de destino cuando se usan proyectos de estilo SDK.The build system is aware of preprocessor symbols representing the target frameworks shown in the Supported target framework versions table when you're using SDK-style projects. Cuando use un símbolo que representa un TFM de .NET Standard, .NET Core o .NET 5, reemplace los puntos y guiones por un carácter de subrayado y cambie las letras minúsculas por mayúsculas (por ejemplo, el símbolo de netstandard1.4 es NETSTANDARD1_4).When using a symbol that represents a .NET Standard, .NET Core, or .NET 5 TFM, replace dots and hyphens with an underscore and change lowercase letters to uppercase (for example, the symbol for netstandard1.4 is NETSTANDARD1_4).

La lista completa de símbolos de preprocesador para plataformas de destino de .NET es la siguiente:The complete list of preprocessor symbols for .NET target frameworks is:

Versiones de .NET Framework de destinoTarget Frameworks SímbolosSymbols
.NET Framework.NET Framework NETFRAMEWORK, NET48, NET472, NET471, NET47, NET462, NET461, NET46, NET452, NET451, NET45, NET40, NET35, NET20NETFRAMEWORK, NET48, NET472, NET471, NET47, NET462, NET461, NET46, NET452, NET451, NET45, NET40, NET35, NET20
.NET Standard.NET Standard NETSTANDARD, NETSTANDARD2_1, NETSTANDARD2_0, NETSTANDARD1_6, NETSTANDARD1_5, NETSTANDARD1_4, NETSTANDARD1_3, NETSTANDARD1_2, NETSTANDARD1_1, NETSTANDARD1_0NETSTANDARD, NETSTANDARD2_1, NETSTANDARD2_0, NETSTANDARD1_6, NETSTANDARD1_5, NETSTANDARD1_4, NETSTANDARD1_3, NETSTANDARD1_2, NETSTANDARD1_1, NETSTANDARD1_0
.NET 5 (y .NET Core).NET 5 (and .NET Core) NET, NET5_0, NETCOREAPP, NETCOREAPP3_1, NETCOREAPP3_0, NETCOREAPP2_2, NETCOREAPP2_1, NETCOREAPP2_0, NETCOREAPP1_1, NETCOREAPP1_0NET, NET5_0, NETCOREAPP, NETCOREAPP3_1, NETCOREAPP3_0, NETCOREAPP2_2, NETCOREAPP2_1, NETCOREAPP2_0, NETCOREAPP1_1, NETCOREAPP1_0

Plataformas de destino en desusoDeprecated target frameworks

Las siguientes plataformas de destino están en desuso.The following target frameworks are deprecated. Los paquetes que tienen como destino estas plataformas deben migrarse a los reemplazos indicados.Packages that target these target frameworks should migrate to the indicated replacements.

TFM en desusoDeprecated TFM ReplacementReplacement
aspnet50aspnet50
aspnetcore50aspnetcore50
dnxcore50dnxcore50
dnxdnx
dnx45dnx45
dnx451dnx451
dnx452dnx452
netcoreappnetcoreapp
dotnetdotnet
dotnet50dotnet50
dotnet51dotnet51
dotnet52dotnet52
dotnet53dotnet53
dotnet54dotnet54
dotnet55dotnet55
dotnet56dotnet56
netstandardnetstandard
netcore50netcore50 uap10.0uap10.0
winwin netcore45netcore45
win8win8 netcore45netcore45
win81win81 netcore451netcore451
win10win10 uap10.0uap10.0
winrtwinrt netcore45netcore45

Vea tambiénSee also