Compartilhar via


Novidades no .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.

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 apenas 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 que estão em execução por um longo tempo podem mudar para versões mais otimizadas durante o processo de execução.
  • A PGO (otimização guiada por perfil) agora funciona com o 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. Totalmente nativo, sem IL ou JIT, e fornece tempo de inicialização rápido e uma implantação pequena e auto-suficiente. No .NET 7, o AOT Nativo foca em aplicativos de console e exige que os aplicativos sejam reduzidos.
  • Melhorias de desempenho para o runtime Mono, que suporta aplicativos Blazor WebAssembly, Android e iOS.

Para uma visão detalhada de muitos dos recursos focados no desempenho que tornam o .NET 7 tão rápido, consulte a postagem no blog sobre as melhorias de desempenho do no .NET 7.

Serialização de System.Text.Json

O .NET 7 inclui melhorias na serialização System.Text.Json nas seguintes áreas:

  • A personalização de contratos oferece mais controle sobre como os tipos são serializados e desserializados. Para obter mais informações, consulte Personalizar um contrato JSON.
  • Serialização polimórfica para hierarquias de tipos definidas pelo usuário. Para obter mais informações, consulte 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, consulte Propriedades necessárias.

Para obter informações sobre essas e outras atualizações, consulte o post no blog 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 adiciona dois números, anteriormente era necessário 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 apresentado melhorias significativas funcionais e de desempenho 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.

  • 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. O código fonte emitido faz parte do seu projeto, permitindo que você o visualize e depure. 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 ocorrem porque, ao especificar RegexOptions.IgnoreCase, não é mais necessário chamar ToLower para cada caractere do padrão e de cada caractere da 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 desse suporte:

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 do .NET

Muitas melhorias foram feitas nas APIs da biblioteca do .NET. Alguns são mencionados em outras seções dedicadas deste artigo. Alguns outros são resumidos na tabela a seguir.

Descrição APIs Mais informações
Suporte para microssegundos e nanossegundos em tipos TimeSpan, TimeOnly, DateTimee 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, consulte as postagens de blog do .NET 7 Preview 4 e do .NET 7 Preview 6 .
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 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 os disponíveis 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, consulte a postagem do blog .NET 7 Preview 5.
Novos conversores de tipo para DateOnly, TimeOnly, Int128, UInt128e Half No namespace System.ComponentModel:

- DateOnlyConverter
- TimeOnlyConverter
- Int128Converter
- UInt128Converter
- HalfConverter
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 contadores de eventos ou APIs de métricas 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 - System.IO.UnixFileMode enum
- File.GetUnixFileMode
- File.SetUnixFileMode
- FileSystemInfo.UnixFileMode
- Directory.CreateDirectory(String, UnixFileMode)
- FileStreamOptions.UnixCreateMode
Para obter mais informações, consulte a postagem no blog do .NET 7 Preview 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 durante a execução 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 se baseia principalmente em OpenTelemetry. As melhorias incluem:

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 uso dos modelos 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 modelos.

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, liste update não têm mais o prefixo --.

Criação

Restrições de modelo , um novo conceito para o .NET 7, permitem que você defina 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 do 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 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, consulte Anunciando o suporte de contêiner interno para o SDK do .NET. Para acessar um tutorial, confira Colocar um aplicativo .NET em um contêiner com dotnet publish.

Gerenciamento de pacote central

Agora você pode gerenciar dependências comuns em seus projetos de um local usando o recurso de CPM (gerenciamento de pacote central) do NuGet. Para habilitá-lo, adicione à raiz do repositório um arquivo Directory.Packages.props. Neste arquivo, defina a propriedade MSBuild ManagePackageVersionsCentrally para true e adicione versões para dependência de pacote comum usando itens de PackageVersion. Em seguida, nos arquivos de projeto individuais, é possível omitir os atributos Version de qualquer item PackageReference que se refira a pacotes gerenciados centralmente.

Para obter mais informações, confira Gerenciamento de pacote central.

Geração de código fonte para 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.

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, consulte 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

A interface do usuário de aplicativo multiplataforma do .NET (.NET MAUI) é uma estrutura multiplataforma para criar aplicativos móveis e de área de trabalho nativos com C# e XAML. Ele unifica APIs android, iOS, macOS e Windows em uma única API. Para obter informações sobre as atualizações mais recentes, consulte Novidades no .NET MAUI 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, consulte Novidades no ASP.NET Core 7.

EF Core

O Entity Framework Core 7.0 inclui suporte independente do 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, consulte Novidades no EF Core 7.0.

Windows Forms

Muito trabalho foi dedicado ao Windows Forms no .NET 7. Foram feitas melhorias nas seguintes áreas:

  • Acessibilidade
  • DPI alto e escala
  • Associação de dados

Para obter mais informações, consulte Novidades do Windows Forms no .NET 7.

WPF

O WPF no .NET 7 inclui várias correções de bug, 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

Orleans é uma estrutura multiplataforma para criar aplicativos distribuídos robustos e escalonáveis. Para obter informações sobre as atualizações mais recentes do Orleans, consulte Migrar de Orleans 3.x para 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

ML.NET agora inclui uma API de classificação de texto que facilita o treinamento de modelos personalizados de classificação de texto usando as técnicas de aprendizado profundo mais recentes. Para obter mais informações, consulte as postagens de blog Novidades com AutoML e ferramentas e Introdução à API de Classificação de Texto ML.NET.

Consulte também