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 monikers de la plataforma de destino (TFM).You specify the target framework in your project file using Target Framework Monikers (TFMs).

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) obtiene 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) gets access to Xamarin-provided iOS API wrappers for iOS 10, or an app that targets the 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 el marco instala en un sistema y pueden incluir las API del marco de trabajo de la aplicación (por ejemplo, ASP.NET).For some target frameworks (for example, the .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 Standard y .NET Core), las API se definen mediante los paquetes incluidos en la aplicación o biblioteca.For package-based target frameworks (for example, .NET Standard and .NET Core), the APIs are defined by the packages included in the app or library. Un metapaquete es un paquete de NuGet que no tiene contenido propio, pero que es una lista de dependencias (otros paquetes).A metapackage is a NuGet package that has no content of its own but is a list of dependencies (other packages). Una plataforma de destino basada en paquetes de NuGet especifica implícitamente un metapaquete que hace referencia a todos los paquetes que forman el marco de trabajo.A NuGet package-based target framework implicitly specifies a metapackage that references all the packages that together make up the framework.

Versiones más recientes de las plataformas de destinoLatest target framework versions

En la tabla siguiente, se definen las plataformas de destino más usadas, 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 the .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.

Versión de .NET Framework 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 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

Versiones compatibles de las plataformas de destinoSupported target framework versions

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 Core y el cliente de NuGet.The following table shows the target frameworks supported by the .NET Core 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 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 Core.NET Core netcoreapp1.0netcoreapp1.0
netcoreapp1.1netcoreapp1.1
netcoreapp2.0netcoreapp2.0
netcoreapp2.1netcoreapp2.1
netcoreapp2.2netcoreapp2.2
netcoreapp3.0netcoreapp3.0
netcoreapp3.1netcoreapp3.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]

Cómo especificar plataformas de destinoHow to specify target frameworks

Las plataformas de destino se especifican en el archivo del proyecto.Target frameworks are specified in your 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 Core 3.0:The following console app project file demonstrates how to target .NET Core 3.0:

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.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 archivo de proyecto de biblioteca tiene como destino las API de .NET Standard (netstandard1.4) y las API de .NET Framework (net40 y net45).The following library project file targets APIs of .NET Standard (netstandard1.4) and APIs of the .NET Framework (net40 and net45). Use el elemento TargetFrameworks plural con varias plataformas de destino.Use the plural TargetFrameworks element with multiple target frameworks. Tenga en cuenta cómo los atributos Condition incluyen paquetes específicos de la implementación cuando se compila la biblioteca para los dos TFM de .NET Framework:Note how 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 para compilar para cada plataforma de destino:Within your library or app, you write conditional code 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 o .NET Core, reemplace el punto 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 or .NET Core TFM, replace the dot 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 Core es:The complete list of preprocessor symbols for .NET Core target frameworks is:

Versiones de .NET Framework de destinoTarget Frameworks SímbolosSymbols
.NET Framework.NET Framework NETFRAMEWORK, NET20, NET35, NET40, NET45, NET451, NET452, NET46, NET461, NET462, NET47, NET471, NET472, NET48NETFRAMEWORK, NET20, NET35, NET40, NET45, NET451, NET452, NET46, NET461, NET462, NET47, NET471, NET472, NET48
.NET Standard.NET Standard NETSTANDARD, NETSTANDARD1_0, NETSTANDARD1_1, NETSTANDARD1_2, NETSTANDARD1_3, NETSTANDARD1_4, NETSTANDARD1_5, NETSTANDARD1_6, NETSTANDARD2_0, NETSTANDARD2_1NETSTANDARD, NETSTANDARD1_0, NETSTANDARD1_1, NETSTANDARD1_2, NETSTANDARD1_3, NETSTANDARD1_4, NETSTANDARD1_5, NETSTANDARD1_6, NETSTANDARD2_0, NETSTANDARD2_1
.NET Core.NET Core NETCOREAPP, NETCOREAPP1_0, NETCOREAPP1_1, NETCOREAPP2_0, NETCOREAPP2_1, NETCOREAPP2_2, NETCOREAPP3_0, NETCOREAPP3_1NETCOREAPP, NETCOREAPP1_0, NETCOREAPP1_1, NETCOREAPP2_0, NETCOREAPP2_1, NETCOREAPP2_2, NETCOREAPP3_0, NETCOREAPP3_1

Plataformas de destino en desusoDeprecated target frameworks

Las siguientes plataformas de destino están en desuso.The following target frameworks are deprecated. Los paquetes destinados a estas plataformas de destino deben migrarse a los reemplazos indicados.Packages targeting 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