Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
.NET Standard é uma especificação formal de APIs .NET disponíveis em várias implementações de .NET. A motivação por trás .NET Standard foi estabelecer maior uniformidade no ecossistema .NET. .NET 5 e versões posteriores adotam uma abordagem diferente para estabelecer a uniformidade que elimina a necessidade de .NET Standard na maioria dos cenários. No entanto, se você quiser compartilhar código entre .NET Framework e qualquer outra implementação de .NET, como .NET Core, sua biblioteca deverá ser direcionada para .NET Standard 2.0. Não novas versões do .NET Standard serão lançadas, mas .NET 5 e todas as versões posteriores continuarão a oferecer suporte .NET Standard 2.1 e anteriores.
Para obter informações sobre como escolher entre .NET 5+ e .NET Standard, consulte .NET 5+ e .NET Standard posteriormente neste artigo.
versões do .NET Standard
.NET Standard tem versão. Cada nova versão adiciona mais APIs. Quando uma biblioteca é criada em relação a uma determinada versão do .NET Standard, ela pode ser executada em qualquer implementação .NET que implemente essa versão do .NET Standard (ou superior).
Direcionar uma versão mais alta do .NET Standard permite que uma biblioteca use mais APIs, mas significa que ela só pode ser usada em versões mais recentes do .NET. Ter como alvo uma versão inferior reduz as APIs disponíveis, mas a biblioteca poderá ser executada em mais lugares.
Selecione .NET versão Standard
.NET Standard 1.0 tem 7.949 das 37.118 APIs disponíveis.
| .NET implementação | Suporte à versão |
|---|---|
| .NET e .NET Core | 1.0, 1.1, 2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 |
| .NET Framework | 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |
| Mono | 4.6, 5.4, 6.4 |
| Xamarin.iOS | 10.0, 10.14, 12.16 |
| Xamarin. Mac | 3.0, 3.8, 5.16 |
| Xamarin. Android | 7.0, 8.0, 10.0 |
| Universal Windows Platform | 8.0, 8.1, 10.0, 10.0.16299, a ser determinado |
| Unidade | 2018.1 |
Para obter mais informações, consulte .NET Standard 1.0. Para obter uma tabela interativa, consulte .NET versões Standard.
Qual versão do .NET Standard devemos direcionar
Se você estiver direcionando .NET Standard, recomendamos que você tenha como destino .NET Standard 2.0, a menos que seja necessário dar suporte a uma versão anterior. A maioria das bibliotecas de uso geral não deve precisar de APIs fora do .NET Standard 2.0 e .NET Framework não dá suporte a .NET Standard 2.1. .NET Standard 2.0 tem suporte em todas as plataformas modernas e é a maneira recomendada de dar suporte a várias plataformas com um único destino.
Se você precisar dar suporte ao .NET Standard 1.x, recomendamos que você também vise o .NET Standard 2.0. .NET Standard 1.x é distribuído como um conjunto granular de pacotes NuGet, o que cria um grafo de dependência de pacote grande e resulta em muitos pacotes sendo baixados quando o projeto é criado. Para obter mais informações, consulte Cross-platform targeting e .NET 5+ e .NET Standard posteriormente neste artigo.
Observação
A partir do .NET 9, um aviso de build será emitido se o projeto for direcionado ao .NET Standard 1.x. Para obter mais informações, consulte Aviso emitido para destinos .NET Standard 1.x.
regras de controle de versão do .NET Standard
Há duas regras principais de controle de versão:
- Aditivo: .NET versões Standard são círculos logicamente concêntricos: versões mais altas incorporam todas as APIs de versões anteriores. Não há mudanças radicais entre as versões.
- Imutável: uma vez enviadas, as versões do .NET Standard são congeladas.
Não haverá novas versões do .NET Standard após a 2.1. Para obter mais informações, consulte .NET 5+ e .NET Standard mais adiante neste artigo.
Especificação
A especificação .NET Standard é um conjunto padronizado de APIs. A especificação é mantida por implementadores .NET, especificamente a Microsoft (inclui .NET Framework, .NET Core e Mono) e Unity.
Artefatos oficiais
A especificação oficial é um conjunto de arquivos .cs que definem as APIs que fazem parte do padrão. O diretório ref no dotnet/standard define as APIs padrão .NET.
O metapacote NETStandard.Library (source) descreve o conjunto de bibliotecas que definem (em parte) uma ou mais versões .NET Standard.
Um componente específico, como o System.Runtime, descreve:
- Parte do .NET Standard (apenas seu escopo).
- Várias versões do .NET Standard, para esse escopo.
Artefatos derivados são fornecidos para habilitar leitura mais conveniente e permitir determinados cenários do desenvolvedor (por exemplo, usando um compilador).
- Lista de APIs em markdown.
- Assemblies de referência, distribuídos como pacotes NuGet e referenciados pelo metapacote NETStandard.Library.
Representação de pacote
O veículo de distribuição principal para os assemblies de referência do .NET Standard são os pacotes NuGet. As implementações são entregues de várias maneiras, apropriadas para cada implementação .NET.
Pacotes NuGet são direcionados a uma ou mais estruturas. .NET pacotes Standard têm como destino a estrutura ".NET Standard". Você pode direcionar o framework .NET Standard usando o netstandardcompact target framework moniker (TFM), por exemplo, netstandard1.4. As bibliotecas que se destinam a serem executadas em várias implementações de .NET devem ter como destino a estrutura .NET Standard. Para o conjunto mais amplo de APIs, alvo netstandard2.0, pois o número de APIs disponíveis mais do que dobrou entre .NET Standard 1.6 e 2.0.
O metapacote NETStandard.Library faz referência ao conjunto completo de pacotes NuGet que definem .NET Standard. A maneira mais comum de direcionar para netstandard é fazer referência a esse metapacote. Ele descreve e fornece acesso às cerca de 40 bibliotecas de .NET e APIs associadas que definem .NET Standard. Você pode referenciar pacotes adicionais destinados a netstandard para obter acesso a APIs adicionais.
Controle de versão
A especificação não é singular, mas um conjunto de APIs versionadas linearmente. A primeira versão do padrão estabelece um conjunto de linhas de base de APIs. As versões subsequentes adicionam APIs e herdam APIs definidas por versões anteriores. Não há nenhuma provisão estabelecida para a remoção de APIs do Standard.
.NET Standard não é específico a nenhuma implementação .NET, nem corresponde ao esquema de controle de versão de nenhuma dessas implementações.
Como observado anteriormente, não haverá novas versões do .NET Standard após a 2.1.
Padrão de .NET de destino
Você pode compilar bibliotecas .NET Standard usando uma combinação do netstandard framework e do metapacote NETStandard.Library.
Modo de compatibilidade do .NET Framework
A partir do .NET Standard 2.0, o modo de compatibilidade do .NET Framework foi introduzido. Esse modo de compatibilidade permite que .NET projetos Standard façam referência a bibliotecas do .NET Framework como se fossem compilados para .NET Standard. Fazer referência a bibliotecas do .NET Framework não funciona para todos os projetos, como bibliotecas que usam APIs Windows Presentation Foundation (WPF).
Para obter mais informações, consulte modo de compatibilidade do .NET Framework.
bibliotecas padrão .NET e Visual Studio
Para criar bibliotecas .NET Standard no Visual Studio, verifique se você Visual Studio 2019 ou posterior ou Visual Studio 2017 versão 15.3 ou posterior instalado no Windows.
Se você precisar consumir bibliotecas .NET Standard 2.0 em seus projetos, também poderá fazer isso no Visual Studio 2015. No entanto, é necessário ter o NuGet cliente 3.6 ou posterior instalado. Você pode baixar o cliente NuGet para Visual Studio 2015 na página NuGet.
.NET 5+ e .NET Standard
.NET 5, .NET 6, .NET 7, .NET 8, .NET 9 e .NET 10 são produtos únicos com um conjunto uniforme de funcionalidades e APIs que podem ser usadas para aplicativos de área de trabalho Windows e aplicativos de console multiplataforma, serviços de nuvem e sites. Os .NET 10 TFMs, por exemplo, refletem essa ampla gama de cenários:
net10.0Esse TFM é para código que é executado em todos os lugares. Com algumas exceções, ele inclui apenas tecnologias que funcionam entre plataformas.
net10.0-windowsEste é um exemplo de um TFM específico do sistema operacional que adiciona funcionalidade específica do sistema operacional a tudo o que
net10.0se refere.
Quando direcionar netx.0 versus netstandard
Para o código existente direcionado ao .NET Standard 2.0 ou posterior, não é necessário alterar o TFM para net8.0 ou um TFM posterior. .NET 8, .NET 9 e .NET 10 implementam .NET Standard 2.1 e anteriores. O único motivo para redirecionar de .NET Standard para .NET 8+ seria obter acesso a mais recursos de runtime, recursos de linguagem ou APIs. Por exemplo, para usar o C# 9, você precisa apontar para o .NET 5 ou uma versão posterior. Você pode usar multitargeting com .NET e .NET Standard para acessar recursos mais recentes e ainda ter sua biblioteca disponível para outras implementações de .NET.
Observação
Se o seu projeto tiver como alvo ao .NET Standard 1.x, recomendamos redirecioná-lo para o .NET Standard 2.0 ou .NET 8+. Para obter mais informações, consulte Aviso emitido para destinos .NET Standard 1.x.
Aqui estão algumas diretrizes para o novo código para .NET 5+:
Componentes do aplicativo
Se você está usando bibliotecas para dividir um aplicativo em vários componentes, recomendamos o direcionamento para o
net10.0. Para simplificar, é melhor manter todos os projetos que compõem seu aplicativo na mesma versão do .NET. Em seguida, você pode presumir os mesmos recursos BCL em qualquer lugar.Bibliotecas reutilizáveis
Se você estiver criando bibliotecas reutilizáveis que planeja enviar no NuGet, considere o equilíbrio entre alcance e conjunto de recursos disponíveis. .NET Standard 2.0 é a versão mais recente compatível com o .NET Framework, portanto, ele fornece um bom alcance com um conjunto de recursos bastante grande. Não recomendamos direcionar .NET Standard 1.x, pois você limitaria o conjunto de recursos disponível para um aumento mínimo no alcance.
Se você não precisar dar suporte ao .NET Framework, poderá direcionar .NET Standard 2.1 ou .NET 10. Recomendamos que você ignore .NET Standard 2.1 e vá direto para .NET 10. Bibliotecas mais amplamente utilizadas têm como alvo múltiplas plataformas, suportando tanto o .NET Standard 2.0 quanto o .NET 5+. O suporte ao .NET Standard 2.0 oferece o maior alcance, enquanto o suporte ao .NET 5+ garante que você possa aproveitar os recursos mais recentes da plataforma para clientes que já estão no .NET 5+.
Problemas do .NET Standard
Aqui estão alguns problemas com o .NET Standard que ajudam a explicar por que as versões .NET 5 e posteriores são a melhor maneira de compartilhar código entre plataformas e cargas de trabalho:
Lentidão para adicionar novas APIs
.NET Standard foi criado como um conjunto de API que todas as implementações .NET teriam que dar suporte, portanto, havia um processo de revisão para que as propostas adicionassem novas APIs. A meta era padronizar apenas AS APIs que poderiam ser implementadas em todas as plataformas de .NET atuais e futuras. O resultado foi que, se um recurso perdia uma versão específica, poderia ser preciso aguardar alguns anos antes de ele ser adicionado a uma versão do Standard. Em seguida, você esperaria ainda mais para que a nova versão do .NET Standard fosse amplamente suportada.
Solução no .NET 5+: Quando um recurso é implementado, ele já está disponível para cada aplicativo e biblioteca .NET 5+ porque a base de código é compartilhada. E como não há diferença entre a especificação da API e sua implementação, você pode aproveitar os novos recursos muito mais rápido do que com .NET Standard.
Controle de versão complexo
A separação da especificação da API de suas implementações resulta em mapeamento complexo entre versões de especificação de API e versões de implementação. Essa complexidade é evidente na tabela mostrada anteriormente neste artigo e nas instruções de como interpretá-la.
Solução no .NET 5+: Não há separação entre a especificação de uma API .NET 5+ e a sua implementação. O resultado é um esquema de TFM simplificado. Há um prefixo de TFM para todas as cargas de trabalho:
net10.0é usado para bibliotecas, aplicativos de console e aplicativos Web. A única variação é um sufixo que especifica APIs específicas da plataforma para uma plataforma específica, comonet10.0-windows. Graças a essa convenção de nomenclatura de TFM, você pode facilmente determinar se um dado aplicativo pode usar uma biblioteca específica. Nenhuma tabela de equivalentes de número de versão, como a do .NET Standard, é necessária.Exceções não suportadas pela plataforma em tempo de execução
.NET Standard expõe APIs específicas da plataforma. Seu código pode ser compilado sem erros e parecer ser portátil para qualquer plataforma, mesmo que não seja portátil. Quando ele é executado em uma plataforma que não tem uma implementação para uma determinada API, você recebe erros de runtime.
Solução em .NET 5+: Os SDKs do .NET 5+ incluem analisadores de código habilitados por padrão. O analisador de compatibilidade da plataforma detecta o uso não intencional de APIs que não têm suporte nas plataformas em que você pretende executar. Para obter mais informações, consulte o analisador de compatibilidade da plataforma.
.NET Standard não descontinuado
.NET Standard ainda é necessário para bibliotecas que podem ser usadas por várias implementações de .NET. Recomendamos que você direcione .NET Standard nos seguintes cenários:
- Use
netstandard2.0para compartilhar código entre .NET Framework e todas as outras implementações de .NET. - Use
netstandard2.1para compartilhar código entre Mono e .NET Core 3.x.