Novidades do .NET 7
O .NET 7 é o sucessor do .NET 6 e se concentra em ser unificado, moderno, simples e rápido. O .NET 7 terá suporte por 18 meses como uma versão STS (suporte de período padrão) (anteriormente conhecida como uma versão atual).
Este artigo lista os novos recursos do .NET 7 e fornece links para informações mais detalhadas sobre cada um.
Para encontrar todos os artigos do .NET que foram atualizados para o .NET 7, confira documentos do .NET: novidades para a versão do .NET 7.
Desempenho
O desempenho é um foco fundamental do .NET 7 e todos os seus recursos são projetados com o desempenho em mente. Além disso, o .NET 7 inclui os seguintes aprimoramentos voltados puramente para o desempenho:
- A OSR (substituição na pilha) é um complemento para compilação em camadas. Ela permite que o runtime altere o código executado por um método em execução no momento no meio de sua execução (ou seja, enquanto ele está "na pilha"). Métodos de execução longa podem mudar para versões mais otimizadas no meio da execução.
- A PGO (otimização guiada por perfil) agora funciona com OSR e é mais fácil de habilitar (adicionando
<TieredPGO>true</TieredPGO>
ao arquivo de projeto). A PGO também pode instrumentar e otimizar itens adicionais, como delegados. - Melhor geração de código para Arm64.
- O AOT nativo produz um executável autônomo no formato de arquivo da plataforma de destino sem dependências externas. Ele é totalmente nativo, sem IL ou JIT, e fornece tempo de inicialização rápido e uma implantação pequena e independente. No .NET 7, o AOT Nativo se concentra em aplicativos de console e requer que os aplicativos sejam cortados.
- Melhorias de desempenho no runtime Mono, que fornece mais recursos a aplicativos Blazor WebAssembly, Android e iOS.
Para obter uma visão detalhada de muitos dos recursos focados no desempenho que tornam o .NET 7 tão rápido, consulte o artigo sobre melhorias de desempenho no .NET 7.
Serialização de System.Text.Json
O .NET 7 inclui melhorias na serialização de System.Text.Json nas seguintes áreas:
- A personalização do contrato oferece mais controle sobre como os tipos são serializados e desserializados. Para obter mais informações, confira Personalizar um contrato JSON.
- Serialização polimórfica para hierarquias de tipo definidas pelo usuário. Para obter mais informações, confira Serializar propriedades de classes derivadas.
- Suporte para membros necessários, que são propriedades que devem estar presentes no conteúdo JSON para que a desserialização tenha êxito. Para obter mais informações, confira Propriedades necessárias.
Para obter informações sobre essas e outras atualizações, confira a postagem no blog sobre novidades em System.Text.Json no .NET 7.
Matemática genérica
O .NET 7 e o C# 11 incluem inovações que permitem executar operações matemáticas genericamente, ou seja, sem precisar saber o tipo exato com o qual você está trabalhando. Por exemplo, se você quisesse escrever um método que adicionasse dois números, anteriormente você precisava adicionar uma sobrecarga do método para cada tipo. Agora você pode escrever um único método genérico, em que o parâmetro de tipo é restrito a ser um tipo semelhante a um número. Para obter mais informações, consulte o artigo Matemática genérica e a postagem no blog sobre matemática genérica.
Expressões regulares
A biblioteca de expressões regulares do .NET tem visto melhorias significativas de desempenho e funcionais no .NET 7:
A nova opção RegexOptions.NonBacktracking permite a correspondência usando uma abordagem que evita o rastreamento inverso e garante o processamento de tempo linear no comprimento da entrada. O mecanismo de não retrocesso não pode ser usado em uma pesquisa da direita para a esquerda e tem algumas outras restrições, mas é rápido para todas as entradas e expressões regulares. Para obter mais informações, confira Modo sem retrocesso.
Os geradores de origem de expressão regular são novos. Os geradores de origem criam um mecanismo otimizado para seu padrão em tempo de compilação, fornecendo benefícios de desempenho de taxa de transferência. A origem emitida faz parte do projeto, para que você possa exibi-la e depurá-la. Além disso, um novo diagnóstico de gerador de origem
SYSLIB1045
alerta você para locais em que você usa o Regex que poderiam ser convertidos no gerador de origem. Para obter mais informações, confira Geradores de origem de expressão regular do .NET.Para pesquisas que não diferenciam maiúsculas de minúsculas, o .NET 7 inclui grandes ganhos de desempenho. Os ganhos vêm porque especificar RegexOptions.IgnoreCase não chama mais ToLower em cada caractere no padrão e em cada caractere na entrada. Em vez disso, todo o trabalho relacionado ao uso de maiúsculas e minúsculas é feito quando o Regex é construído.
Regex agora dá suporte a intervalos para algumas APIs. Os novos métodos a seguir foram adicionados como parte deste suporte:
- Regex.EnumerateMatches
- Regex.Count
- Regex.IsMatch(ReadOnlySpan<Char>) (e algumas outras sobrecargas)
Para obter mais informações sobre essas e outras melhorias, consulte a postagem no blog sobre Aprimoramentos em expressões regulares no .NET 7.
Bibliotecas .NET
Muitas melhorias foram feitas nas APIs de biblioteca do .NET. Algumas são mencionados em outras seções dedicadas deste artigo. Algumas outras estão resumidas na tabela a seguir.
Descrição | APIs | Informações adicionais |
---|---|---|
Suporte para microssegundos e nanossegundos em tipos TimeSpan, TimeOnly, DateTime e DateTimeOffset | - DateTime.Microsecond - DateTime.Nanosecond - DateTime.AddMicroseconds(Double) - Novas sobrecargas de construtor DateTime - DateTimeOffset.Microsecond - DateTimeOffset.Nanosecond - DateTimeOffset.AddMicroseconds(Double) - Novas sobrecargas de construtor DateTimeOffset - TimeOnly.Microsecond - TimeOnly.Nanosecond - TimeSpan.Microseconds - TimeSpan.Nanoseconds - TimeSpan.FromMicroseconds(Double) - E outros... |
Essas APIs significam que você não precisa mais executar cálculos no valor "tick" para determinar valores de microssegundos e nanossegundos. Para obter mais informações, confira a postagem no blog sobre a Versão prévia 4 do .NET 7. |
APIs para ler, escrever, arquivar e extrair arquivos Tar | System.Formats.Tar | Para obter mais informações, confira as postagens no blog sobre Versão prévia 4 do .NET 7 e Versão prévia 6 do .NET 7. |
APIs de limitação de taxa para proteger um recurso mantendo o tráfego em um nível seguro | RateLimiter e outros no pacote NuGet de System.Threading.RateLimiting | Para obter mais informações, confira Limite de taxa de um manipulador HTTP no .NET e Anúncio de limitação de taxa para o .NET. |
APIs para ler todos os dados de um Stream | - Stream.ReadExactly - Stream.ReadAtLeast |
Stream.Read pode retornar menos dados do que o que está disponível no fluxo. Os novos métodos ReadExactly leem exatamente o número de bytes solicitados e os novos métodos ReadAtLeast leem pelo menos o número de bytes solicitados. Para obter mais informações, confira a postagem no blog sobre a Versão prévia 5 do .NET 7. |
Novos conversores de tipo para DateOnly , TimeOnly , Int128 , UInt128 e Half |
No namespace System.ComponentModel: - DateOnlyConverter - TimeOnlyConverter - Int128Converter - UInt128Converter - HalfConverter |
Os conversores de tipo geralmente são usados para converter tipos de valor de e para uma cadeia de caracteres. Essas novas APIs adicionam conversores de tipo para tipos que foram adicionados mais recentemente. |
Suporte a métricas para IMemoryCache | - MemoryCacheStatistics - MemoryCache.GetCurrentStatistics() |
GetCurrentStatistics() permite que você use APIs de métricas ou contadores de eventos para acompanhar estatísticas de um ou mais caches de memória. Para obter mais informações, confira a postagem no blog sobre a Versão prévia 4 do .NET 7. |
APIs para obter e definir permissões de arquivo Unix | - enum System.IO.UnixFileMode - File.GetUnixFileMode - File.SetUnixFileMode - FileSystemInfo.UnixFileMode - Directory.CreateDirectory(String, UnixFileMode) - FileStreamOptions.UnixCreateMode |
Para obter mais informações, confira a postagem no blog sobre a Versão prévia 7 do .NET 7. |
Atributo para indicar que tipo de sintaxe é esperado em uma cadeia de caracteres | StringSyntaxAttribute | Por exemplo, você pode especificar que um parâmetro string espera uma expressão regular atribuindo o parâmetro com [StringSyntax(StringSyntaxAttribute.Regex)] . |
APIs para interoperabilidade com JavaScript ao executar no navegador ou em outras arquiteturas WebAssembly | System.Runtime.InteropServices.JavaScript | Os aplicativos JavaScript podem usar o suporte expandido do WebAssembly no .NET 7 para reutilizar bibliotecas do .NET do JavaScript. Para obter mais informações, confira Usar o .NET de qualquer aplicativo JavaScript no .NET 7. |
Observabilidade
O .NET 7 faz melhorias na observabilidade. A observabilidade ajuda você a entender o estado do aplicativo à medida que ele é dimensionado e à medida que a complexidade técnica aumenta. A implementação de observabilidade do .NET é criada principalmente em torno do OpenTelemetry. As melhorias incluem:
- O novo evento Activity.CurrentChanged, que você pode usar para detectar quando o contexto de intervalo de um thread gerenciado é alterado.
- Novos métodos de enumerador com desempenho para propriedades Activity: EnumerateTagObjects(), EnumerateLinks() e EnumerateEvents().
Para obter mais informações, confira a postagem no blog sobre a Versão prévia 4 do .NET 7.
SDK .NET
O SDK do .NET 7 melhora a experiência de modelo da CLI. Ele também permite a publicação em contêineres e o gerenciamento central de pacotes com o NuGet.
Modelos
Algumas melhorias bem-vindas foram feitas no comando dotnet new
e na criação de modelo.
dotnet new
O comando da CLI dotnet new
, que cria um novo projeto, arquivo de configuração ou solução com base em um modelo, agora dá suporte à conclusão da guia para explorar:
- Nomes de modelo disponíveis
- Opções de modelo
- Valores de opção permitidos
Além disso, para melhor conformidade, os subcomandos install
, uninstall
, search
, list
e update
não têm mais o prefixo --
.
Criação
As restrições de modelo, um novo conceito para o .NET 7, permitem definir o contexto no qual seus modelos são permitidos. As restrições ajudam o mecanismo de modelo a determinar quais modelos ele deve mostrar em comandos como dotnet new list
. Você pode restringir seu modelo a um sistema operacional, um host de mecanismo de modelo (por exemplo, a CLI do .NET ou a caixa de diálogo Novo Projeto no Visual Studio) e uma carga de trabalho instalada. Você define restrições no arquivo de configuração do seu modelo.
Também no arquivo de configuração de modelo, agora você pode anotar um parâmetro de modelo como permitindo vários valores. Por exemplo, o modelo web
permite várias formas de autenticação.
Para obter mais informações, confira a postagem no blog sobre a Versão prévia 6 do .NET 7.
Publicar em um contêiner
Os contêineres são uma das maneiras mais fáceis de distribuir e executar uma ampla variedade de aplicativos e serviços na nuvem. As imagens de contêiner agora são um tipo de saída com suporte do SDK do .NET e você pode criar versões em contêineres de seus aplicativos usando dotnet publish
. Para obter mais informações sobre o recurso, confira um artigo sobre o Anúncio do suporte de contêiner integrado para o SDK do .NET. Para acessar um tutorial, confira Colocar um aplicativo .NET em um contêiner com dotnet publish.
Gerenciamento de pacotes central
Agora você pode gerenciar dependências comuns em seus projetos a partir de um local usando o recurso de CPM (gerenciamento de pacote central) do NuGet. Para habilitá-lo, adicione um arquivo Directory.Packages.props à raiz do repositório. Nesse arquivo, defina a propriedade MSBuild ManagePackageVersionsCentrally
como true
e adicione versões para dependência de pacote comum usando itens PackageVersion
. Em seguida, nos arquivos de projeto individuais, você pode omitir atributos Version
de todos os itens PackageReference que se referem a pacotes gerenciados centralmente.
Para obter mais informações, confira Gerenciamento de pacote central.
Geração de origem P/Invoke
O .NET 7 apresenta um gerador de origem para invocações de plataforma (P/Invokes) em C#. O gerador de origem procura LibraryImportAttribute em métodos static
, partial
para disparar a geração de origem de tempo de compilação do código marshalling. Ao gerar o código marshalling em tempo de compilação, nenhum stub IL precisa ser gerado em tempo de execução, como faz ao usar DllImportAttribute. O gerador de origem melhora o desempenho do aplicativo e também permite que o aplicativo seja compilado antecipadamente (AOT). Para obter mais informações, confira Geração de origem para invocações de plataforma e Usar marshallers personalizados em P/Invokes gerados pela origem.
Versões relacionadas
Esta seção contém informações sobre produtos relacionados que têm versões que coincidem com a versão do .NET 7.
Visual Studio 2022 versão 17.4
Para obter mais informações, confira Novidades no Visual Studio 2022.
C# 11
O C# 11 inclui suporte para matemática genérica, literais de cadeia de caracteres brutos, tipos com escopo de arquivo e outros novos recursos. Para obter mais informações, confira Novidades do C# 11.
F# 7
O F# 7 continua o percurso para tornar a linguagem mais simples e melhorar o desempenho e a interoperabilidade com novos recursos do C#. Para obter mais informações, confira Apresentação do F# 7.
.NET MAUI
O .NET MAUI (Interface do usuário de aplicativo multiplataforma) é uma estrutura multiplataforma para criar aplicativos móveis e desktop nativos com C# e XAML. Ele unifica APIs do Android, iOS, macOS e Windows em uma única API. Para obter informações sobre as atualizações mais recentes, confira Novidades no MAUI do .NET para .NET 7.
ASP.NET Core
O ASP.NET Core 7.0 inclui middleware de limitação de taxa, melhorias em APIs mínimas e transcodificação de JSON gRPC. Para obter informações sobre todas as atualizações, confira Novidades no ASP.NET Core 7.
EF Core
O Entity Framework Core 7.0 inclui suporte independente de provedor para colunas JSON, melhor desempenho para salvar alterações e modelos de engenharia reversa personalizados. Para obter informações sobre todas as atualizações, confira Novidades no EF Core 7.0.
Windows Forms
Muito trabalho foi realizado no Windows Forms para .NET 7. Foram feitas melhorias nas seguintes áreas:
- Acessibilidade
- DPI alto e escala
- Associação de dados
Para obter mais informações, confira Novidades no Windows Forms no .NET 7.
WPF
O WPF no .NET 7 inclui várias correções de bugs, bem como melhorias de desempenho e acessibilidade. Para obter mais informações, confira a postagem de blog sobre Novidades do WPF no .NET 7.
Orleans
O Orleans é uma estrutura multiplataforma para a criação de aplicativos distribuídos robustos e escalonáveis. Para saber mais sobre as atualizações mais recentes do Orleans, confira Migrar do Orleans 3.x para o 7.0.
Assistente de atualização do .NET e CoreWCF
O Assistente de atualização do .NET agora dá suporte à atualização de aplicativos WCF do lado do servidor para CoreWCF, que é uma porta criada pela comunidade do WCF para o .NET (Core). Para obter mais informações, confira Atualizar um projeto do lado do servidor do WCF para usar o CoreWCF.
ML.NET
O ML.NET agora inclui uma API de classificação de texto que facilita o treinamento de modelos de classificação de texto personalizados usando as técnicas de aprendizado profundo de última geração mais recentes. Para obter mais informações, confira as postagens no blog sobre novidades no AutoML e ferramentas e Introdução à API de classificação de texto ML.NET.