Compartilhar via


Estruturas de destino

O NuGet usa referências de estrutura de destino em uma variedade de locais para identificar e isolar especificamente componentes dependentes da estrutura de um pacote:

  • arquivo de projeto: para projetos no estilo SDK, o .csproj contém as referências da estrutura de destino.
  • Manifesto .nuspec: um pacote pode indicar pacotes distintos a serem incluídos em um projeto, dependendo da estrutura de destino do projeto.
  • Nome da pasta .nupkg: as pastas dentro da pasta de lib um pacote podem ser nomeadas de acordo com a estrutura de destino, cada uma contendo as DLLs e outro conteúdo apropriado para essa estrutura.
  • packages.config: o targetframework atributo de uma dependência especifica a variante de um pacote a ser instalado.

Para obter a lista canônica de todas as estruturas de destino com suporte e sua sintaxe TFM, consulte as estruturas de destino em projetos no estilo SDK.

Os valores de TargetFramework são aliases

A TargetFramework propriedade em um arquivo de projeto é um nome amigável — um alias — que é convertido em uma identidade de estrutura canônica. O SDK do .NET executa essa tradução definindo o TargetFrameworkMoniker (TFM) e, quando aplicável, as TargetPlatformMoniker propriedades.

Por exemplo, quando você escreve <TargetFramework>net10.0-windows</TargetFramework>, o SDK do .NET converte isso em:

  • TargetFrameworkMoniker = .NETCoreApp,Version=v10.0
  • TargetPlatformMoniker = Windows,Version=7.0

O NuGet usa essas propriedades de moniker — não a TargetFramework cadeia de caracteres — para verificações de compatibilidade de pacote. Isso significa que o TargetFramework valor em si pode ser qualquer cadeia de caracteres, desde que as propriedades do moniker sejam definidas corretamente. Por exemplo, o projeto a seguir é válido:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>banana</TargetFramework>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(TargetFramework)' == 'banana' ">
    <TargetFrameworkIdentifier>.NETCoreApp</TargetFrameworkIdentifier>
    <TargetFrameworkVersion>v10.0</TargetFrameworkVersion>
    <TargetFrameworkMoniker>.NETCoreApp,Version=v10.0</TargetFrameworkMoniker>
  </PropertyGroup>
</Project>

Esse projeto restaura e cria para o .NET 10.0, mesmo que o TargetFramework valor seja banana. O SDK do .NET já depende desse mecanismo de aliasing para TFMs específicos do sistema operacional, como net8.0-ios e net8.0-android, em que o TFM curto é traduzido para o moniker completo com informações da plataforma.

Direcionamento múltiplo com estruturas duplicadas

A partir do NuGet 7.6 /.NET SDK 10.0.300, vários TargetFrameworks aliases podem ser resolvidos para a mesma estrutura efetiva. Isso permite cenários como builds multi-RID e direcionamento de extensão de várias versões. Para obter detalhes sobre como isso funciona com restauração, pacote, arquivos de bloqueio e referências de projeto, consulte Direcionamento de várias estruturas.

Estruturas com suporte

Uma estrutura normalmente é referenciada por um pequeno moniker de estrutura de destino ou TFM. No .NET Standard, isso também é generalizado no TxM para permitir uma única referência a várias estruturas.

Observação

O código-fonte do cliente NuGet que calcula as tabelas abaixo é encontrado nos seguintes locais:

Os clientes NuGet dão suporte às estruturas na tabela abaixo. Os equivalentes são mostrados entre colchetes []. Observe que algumas ferramentas, como dotnet, podem usar variações de TFMs canônicas em alguns arquivos. Por exemplo, dotnet pack usa em um .nuspec arquivo em vez de netcoreapp2.0.NETCoreApp2.0 . As várias ferramentas de cliente do NuGet lidam com essas variações corretamente, mas você sempre deve usar TFMs canônicas ao editar arquivos diretamente.

Nome Abreviação TFMs/TxMs
.NET Framework net net11
net20
net35
net40
net403
net45
net451
net452
net46
net461
net462
net47
net471
net472
net48
Microsoft Store (Windows Store) netcore netcore [netcore45]
netcore45 [win, win8]
netcore451 [win81]
netcore50
MicroFramework do .NET netmf netmf
Windows ganhar win [win8, netcore45]
win8 [netcore45, win]
win81 [netcore451]
win10 (sem suporte da Plataforma Windows 10)
Silverlight Sl sl4
sl5
Windows Phone (SL) Wp wp [wp7]
wp7
wp75
wp8
wp81
Windows Phone (UWP) wpa81
Plataforma Universal do Windows Uap uap [uap10.0]
uap10.0
uap10.0.xxxxx (em que 10.0.xxxxx é a versão mínima da plataforma de destino do aplicativo de consumo)
.NET Standard netstandard netstandard1.0
netstandard1.1
netstandard1.2
netstandard1.3
netstandard1.4
netstandard1.5
netstandard1.6
netstandard2.0
netstandard2.1
.NET 5+ (e .NET Core) netcoreapp netcoreapp1.0
netcoreapp1.1
netcoreapp2.0
netcoreapp2.1
netcoreapp2.2
netcoreapp3.0
netcoreapp3.1
net net5.0
net6.0
net7.0
net8.0
net9.0
net10.0
Tizen tizen tizen3
tizen4
Native nativo nativo

Estruturas preteridas

As estruturas a seguir são preteridas. Os pacotes direcionados a essas estruturas devem migrar para as substituições indicadas.

Estrutura preterida Substituição
aspnet50 netcoreapp
aspnetcore50
dnxcore50
Dnx
dnx45
dnx451
dnx452
dotnet netstandard
dotnet50
dotnet51
dotnet52
dotnet53
dotnet54
dotnet55
dotnet56
winrt ganhar

Precedence

Várias estruturas estão relacionadas e compatíveis entre si, mas não necessariamente equivalentes:

Framework Pode usar
uap (Plataforma Universal do Windows) Windows 8.1
wpa81
netcore50
win (Microsoft Store) winrt

NET Standard

O .NET Standard simplifica as referências entre estruturas compatíveis com binários, permitindo que uma única estrutura de destino faça referência a uma combinação de outras. (Para obter plano de fundo, consulte o .NET Primer.)

A Ferramenta nuget Get Nearest Framework simula o que o NuGet usa para selecionar uma estrutura de muitos ativos de estrutura disponíveis em um pacote com base na estrutura do projeto.

A dotnet série de monikers deve ser usada no NuGet 3.3 e anterior; a netstandard sintaxe do moniker deve ser usada na v3.4 e posterior.

Bibliotecas de classes portáteis

Aviso

PcLs não são recomendados. Embora haja suporte para PCLs, os autores do pacote devem dar suporte ao netstandard. O .NET Platform Standard é uma evolução de PCLs e representa a portabilidade binária entre plataformas usando um único moniker que não está vinculado a uma biblioteca estática, como monikers portáteis-a+b+c .

Para definir uma estrutura de destino que se refere a várias estruturas filho-destino, a portable palavra-chave usada para prefixar a lista de estruturas referenciadas. Evite incluir artificialmente estruturas extras que não são diretamente compiladas porque elas podem levar a efeitos colaterais não intencionais nessas estruturas.

Estruturas adicionais definidas por terceiros fornecem compatibilidade com outros ambientes acessíveis dessa maneira. Além disso, há números de perfil abreviados disponíveis para fazer referência a essas combinações de estruturas relacionadas, Profile#mas essa não é uma prática recomendada para usar esses números, pois reduz a legibilidade das pastas e .nuspec.

Perfil # Estruturas Nome completo .NET Standard
Perfil2 . NETFramework 4.0 portable-net40+win8+sl4+wp7
Windows 8.0
Silverlight 4.0
WindowsPhone 7.0
Profile3 . NETFramework 4.0 portable-net40+sl4
Silverlight 4.0
Profile4 . NETFramework 4.5 portable-net45+sl4+win8+wp7
Silverlight 4.0
Windows 8.0
WindowsPhone 7.0
Perfil5 . NETFramework 4.0 portable-net40+win8
Windows 8.0
Profile6 . NETFramework 4.0.3 portable-net403+win8
Windows 8.0
Profile7 . NETFramework 4.5 portable-net45+win8 netstandard1.1
Windows 8.0
Perfil14 . NETFramework 4.0 portable-net40+sl5
Silverlight 5.0
Perfil18 . NETFramework 4.0.3 portable-net403+sl4
Silverlight 4.0
Perfil19 . NETFramework 4.0.3 portable-net403+sl5
Silverlight 5.0
Perfil23 . NETFramework 4.5 portable-net45+sl4
Silverlight 4.0
Perfil24 . NETFramework 4.5 portable-net45+sl5
Silverlight 5.0
Profile31 Windows 8.1 portable-win81+wp81 netstandard1.0
WindowsPhone 8.1 (SL)
Profile32 Windows 8.1 portable-win81+wpa81 netstandard1.2
WindowsPhone 8.1 (UWP)
Profile36 . NETFramework 4.0 portable-net40+sl4+win8+wp8
Silverlight 4.0
Windows 8.0
WindowsPhone 8.0 (SL)
Profile37 . NETFramework 4.0 portable-net40+sl5+win8
Silverlight 5.0
Windows 8.0
Profile41 . NETFramework 4.0.3 portable-net403+sl4+win8
Silverlight 4.0
Windows 8.0
Profile42 . NETFramework 4.0.3 portable-net403+sl5+win8
Silverlight 5.0
Windows 8.0
Profile44 . NETFramework 4.5.1 portable-net451+win81 netstandard1.2
Windows 8.1
Profile46 . NETFramework 4.5 portable-net45+sl4+win8
Silverlight 4.0
Windows 8.0
Profile47 . NETFramework 4.5 portable-net45+sl5+win8
Silverlight 5.0
Windows 8.0
Profile49 . NETFramework 4.5 portable-net45+wp8 netstandard1.0
WindowsPhone 8.0 (SL)
Profile78 . NETFramework 4.5 portable-net45+win8+wp8 netstandard1.0
Windows 8.0
WindowsPhone 8.0 (SL)
Profile84 WindowsPhone 8.1 portable-wp81+wpa81 netstandard1.0
WindowsPhone 8.1 (UWP)
Profile88 . NETFramework 4.0 portable-net40+sl4+win8+wp75
Silverlight 4.0
Windows 8.0
WindowsPhone 7.5
Profile92 . NETFramework 4.0 portable-net40+win8+wpa81
Windows 8.0
WindowsPhone 8.1 (UWP)
Profile95 . NETFramework 4.0.3 portable-net403+sl4+win8+wp7
Silverlight 4.0
Windows 8.0
WindowsPhone 7.0
Profile96 . NETFramework 4.0.3 portable-net403+sl4+win8+wp75
Silverlight 4.0
Windows 8.0
WindowsPhone 7.5
Perfil102 . NETFramework 4.0.3 portable-net403+win8+wpa81
Windows 8.0
WindowsPhone 8.1 (UWP)
Perfil104 . NETFramework 4.5 portable-net45+sl4+win8+wp75
Silverlight 4.0
Windows 8.0
WindowsPhone 7.5
Profile111 . NETFramework 4.5 portable-net45+win8+wpa81 netstandard1.1
Windows 8.0
WindowsPhone 8.1 (UWP)
Perfil136 . NETFramework 4.0 portable-net40+sl5+win8+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.0 (SL)
Perfil143 . NETFramework 4.0.3 portable-net403+sl4+win8+wp8
Silverlight 4.0
Windows 8.0
WindowsPhone 8.0 (SL)
Perfil147 . NETFramework 4.0.3 portable-net403+sl5+win8+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.0 (SL)
Perfil151 NETFramework 4.5.1 portable-net451+win81+wpa81 netstandard1.2
Windows 8.1
WindowsPhone 8.1 (UWP)
Perfil154 . NETFramework 4.5 portable-net45+sl4+win8+wp8
Silverlight 4.0
Windows 8.0
WindowsPhone 8.0 (SL)
Perfil157 Windows 8.1 portable-win81+wp81+wpa81 netstandard1.0
WindowsPhone 8.1 (SL)
WindowsPhone 8.1 (UWP)
Perfil158 . NETFramework 4.5 portable-net45+sl5+win8+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.0 (SL)
Perfil225 . NETFramework 4.0 portable-net40+sl5+win8+wpa81
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
Perfil240 . NETFramework 4.0.3 portable-net403+sl5+win8+wpa8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
Perfil255 . NETFramework 4.5 portable-net45+sl5+win8+wpa81
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
Perfil259 . NETFramework 4.5 portable-net45+win8+wpa81+wp8 netstandard1.0
Windows 8.0
WindowsPhone 8.1 (UWP)
WindowsPhone 8.0 (SL)
Perfil328 . NETFramework 4.0 portable-net40+sl5+win8+wpa81+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
WindowsPhone 8.0 (SL)
Perfil336 . NETFramework 4.0.3 portable-net403+sl5+win8+wpa81+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
WindowsPhone 8.0 (SL)
Perfil344 . NETFramework 4.5 portable-net45+sl5+win8+wpa81+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
WindowsPhone 8.0 (SL)

Além disso, os pacotes NuGet direcionados ao Xamarin podem usar estruturas adicionais definidas pelo Xamarin:

Nome Descrição .NET Standard
monoandroide Suporte mono para o sistema operacional Android netstandard1.4
monotouch Suporte mono para iOS netstandard1.4
monomac Suporte mono para OSX netstandard1.4
xamarinios Suporte para Xamarin para iOS netstandard1.4
xamarinmac Suporte para Xamarin para Mac netstandard1.4
xamarinpsthree Suporte para Xamarin no Playstation 3 netstandard1.4
xamarinpsfour Suporte para Xamarin no Playstation 4 netstandard1.4
xamarinpsvita Suporte para Xamarin no PS Vita netstandard1.4
xamarinwatchos Xamarin for Watch OS netstandard1.4
xamarin tvOS Xamarin para SO de TV netstandard1.4
xamarinxboxthreesixty Xamarin para XBox 360 netstandard1.4
xamarinxboxone Xamarin para XBox One netstandard1.4

Observação

Stephen Cleary criou uma ferramenta que lista os PCLs com suporte, que você pode encontrar em sua postagem, perfis do Framework no .NET.