Estruturas de destino em projetos no estilo SDKTarget frameworks in SDK-style projects

Ao destinar a uma estrutura em um aplicativo ou uma biblioteca, você está especificando o conjunto de APIs que deseja disponibilizar para o aplicativo ou a 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. Você especifica a estrutura de destino em seu arquivo de projeto usando os TFMs (Monikers da Estrutura de Destino).You specify the target framework in your project file using Target Framework Monikers (TFMs).

Um aplicativo ou uma biblioteca pode ser destinada a uma versão do .NET Standard.An app or library can target a version of .NET Standard. As versões do .NET Standard representam conjuntos de APIs padronizadas entre todas as implementações do .NET..NET Standard versions represent standardized sets of APIs across all .NET implementations. Por exemplo, uma biblioteca pode se destinar ao NET Standard 1.6 e obter acesso a APIs que funcionam no .NET Core e .NET Framework usando a mesma base de código.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.

Um aplicativo ou uma biblioteca também pode se destinar a uma implementação específica do .NET para obter acesso a APIs específicas de implementação.An app or library can also target a specific .NET implementation to gain access to implementation-specific APIs. Por exemplo, um aplicativo que tem como destino o Xamarin.iOS (por exemplo, Xamarin.iOS10) obtém acesso aos wrappers da API fornecidos para Xamarin iOS do iOS 10 ou um aplicativo que tem como destino a UWP (Plataforma Universal do Windows, uap10.0) tem acesso a APIs que são compiladas para dispositivos que executam o 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 algumas estruturas de destino (por exemplo, o .NET Framework), as APIs são definidas pelos assemblies que a estrutura instala em um sistema e pode incluir as APIs da estrutura do aplicativo (por exemplo, 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 estruturas de destino com base em pacote (por exemplo, .NET Standard e .NET Core), as APIs são definidas pelos pacotes incluídos no aplicativo ou na 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. Um metapacote é um pacote NuGet que não tem nenhum conteúdo próprio, mas é uma lista de dependências (outros pacotes).A metapackage is a NuGet package that has no content of its own but is a list of dependencies (other packages). Uma estrutura de destino com base em pacote NuGet especifica implicitamente um metapacote que faz referência a todos os pacotes que, juntos, compõem a estrutura.A NuGet package-based target framework implicitly specifies a metapackage that references all the packages that together make up the framework.

Versões mais recentes de estrutura de destinoLatest target framework versions

A tabela a seguir define as estruturas de destino mais comuns, como elas são referenciadas e qual versão do .NET Standard elas implementam.The following table defines the most common target frameworks, how they're referenced, and which version of the .NET Standard they implement. Estas versões de estrutura de destino são as versões estáveis mais recentes.These target framework versions are the latest stable versions. As versões de pré-lançamento não são mostradas.Pre-release versions aren't shown. Um TFM (Moniker da Estrutura de Destino) é um formato de token padronizado para especificar a estrutura de destino de um aplicativo ou uma biblioteca do .NET.A Target Framework Moniker (TFM) is a standardized token format for specifying the target framework of a .NET app or library.

Estrutura de DestinoTarget Framework ÚltimaLatest
Versão estávelStable Version
TFM (Moniker de Estrutura de Destino)Target Framework Moniker (TFM) ImplementadoImplemented
Versão do .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

Versões de estrutura de destino com suporteSupported target framework versions

Normalmente, uma estrutura de destino é referenciada por um TFM.A target framework is typically referenced by a TFM. A tabela a seguir mostra as estruturas de destino com suporte pelo SDK do .NET Core e o cliente do NuGet.The following table shows the target frameworks supported by the .NET Core SDK and the NuGet client. Equivalentes estão mostrados entre colchetes.Equivalents are shown within brackets. Por exemplo, win81 é um TFM equivalente ao netcore451.For example, win81 is an equivalent TFM to netcore451.

Estrutura 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
Windows StoreWindows 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 do WindowsUniversal Windows Platform uap [uap10.0]uap [uap10.0]
uap10.0 [win10] [netcore50]uap10.0 [win10] [netcore50]

Como especificar estruturas de destinoHow to specify target frameworks

As estruturas de destino são especificadas no arquivo de projeto.Target frameworks are specified in your project file. Quando uma única estrutura de destino é especificada, use o elemento TargetFramework.When a single target framework is specified, use the TargetFramework element. O arquivo de projeto do aplicativo de console a seguir demonstra como segmentar o .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>

Ao especificar várias estruturas de destino, você pode fazer referência a assemblies para cada estrutura de destino de forma condicional.When you specify multiple target frameworks, you may conditionally reference assemblies for each target framework. Em seu código, você pode condicionalmente compilar em relação a esses assemblies usando símbolos de pré-processador com a lógica if-then-else.In your code, you can conditionally compile against those assemblies by using preprocessor symbols with if-then-else logic.

O seguinte arquivo de projeto de biblioteca tem como destino as APIs do .NET Standard (netstandard1.4) e APIs do .NET Framework (net40 e net45).The following library project file targets APIs of .NET Standard (netstandard1.4) and APIs of the .NET Framework (net40 and net45). Use o elemento TargetFrameworks plural com várias estruturas de destino.Use the plural TargetFrameworks element with multiple target frameworks. Observe como os atributos Condition incluem pacotes específicos de implementação quando a biblioteca é compilada para os dois TFMs 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>

No aplicativo ou na biblioteca, você escreve código condicional para compilar para cada estrutura 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
    }
}

O sistema de compilação está ciente dos símbolos de pré-processador que representam as estruturas de destino mostradas na tabela de versões de quadro de destino suportada quando você estiver usando projetos no 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. Ao usar um símbolo que representa um TFM do .NET Standard ou .NET Core, substitua o ponto por um sublinhado e altere as letras minúsculas por maiúsculas (por exemplo, o símbolo de netstandard1.4 é 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).

A lista completa de símbolos de pré-processador para estruturas de destino do .NET Core é:The complete list of preprocessor symbols for .NET Core target frameworks is:

Frameworks 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

Estruturas de destino preteridasDeprecated target frameworks

As seguintes estruturas de destino estão preteridas.The following target frameworks are deprecated. Os pacotes direcionados a essas estruturas de destino devem ser migrados para as substituições indicadas.Packages targeting these target frameworks should migrate to the indicated replacements.

TFM preteridoDeprecated TFM SubstituiçãoReplacement
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

Confira tambémSee also