Partilhar via


O que há de novo 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 de suporte de prazo padrão (STS) (anteriormente conhecida como versão atual ).

Este artigo lista os novos recursos do .NET 7 e fornece links para informações mais detalhadas sobre cada um.

Para localizar todos os artigos do .NET que foram atualizados para o .NET 7, consulte .NET docs: What's new for the .NET 7 release.

Desempenho

O desempenho é um dos principais focos 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 destinados exclusivamente ao desempenho:

  • A substituição on-stack (OSR) é um complemento à compilação hierárquica. Ele permite que o tempo de execução altere o código executado por um método atualmente em execução no meio de sua execução (ou seja, enquanto ele está "na pilha"). Os métodos de execução longa podem mudar para versões mais otimizadas no meio da execução.
  • A otimização guiada por perfil (PGO) agora funciona com OSR e é mais fácil de habilitar (adicionando <TieredPGO>true</TieredPGO> ao seu arquivo de projeto). O PGO também pode instrumentar e otimizar coisas adicionais, como delegados.
  • Geração de código melhorada 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 independente. No .NET 7, o AOT nativo se concentra em aplicativos de console e exige que os aplicativos sejam cortados.
  • Melhorias de desempenho para o tempo de execução Mono, que alimenta 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 a postagem do blog Melhorias de desempenho no .NET 7 .

Serialização System.Text.Json

O .NET 7 inclui melhorias na serialização 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, consulte Personalizar um contrato JSON.
  • Serialização polimórfica para hierarquias de tipo 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 na carga JSON para que a desserialização seja bem-sucedida. Para obter mais informações, consulte Propriedades necessárias.

Para obter informações sobre essas e outras atualizações, consulte a postagem do blog O que há de novo no 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 de forma genérica, ou seja, sem precisar saber o tipo exato com o qual está trabalhando. Por exemplo, se você quisesse escrever um método que adicionasse dois números, anteriormente você tinha que adicionar uma sobrecarga do método para cada tipo. Agora você pode escrever um único método genérico, onde o parâmetro type é 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 do blog Matemática genérica.

Expressões regulares

. A biblioteca de expressões regulares da NET viu melhorias funcionais e de desempenho significativas no .NET 7:

  • A nova opção RegexOptions.NonBacktracking permite a correspondência usando uma abordagem que evita o retrocesso e garante o processamento em tempo linear no comprimento da entrada. O mecanismo nonbacktracking 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 expressões e entradas regulares. Para obter mais informações, consulte Modo sem retrocesso.

  • Os geradores de origem de expressão regular são novos. Os geradores de código-fonte criam um mecanismo otimizado para seu padrão em tempo de compilação, fornecendo benefícios de desempenho de taxa de transferência. A fonte emitida faz parte do seu projeto, para que você possa visualizá-la e depurá-la. Além disso, um novo diagnóstico SYSLIB1045 do gerador de origem alerta você para locais que você usa Regex que podem ser convertidos para o gerador de origem. Para obter mais informações, consulte Geradores de fonte 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 a especificação RegexOptions.IgnoreCase não chama ToLower mais cada caractere no padrão e em cada caractere na entrada. Em vez disso, todo o trabalho relacionado ao invólucro é feito quando o Regex é construído.

  • Regex agora suporta extensões para algumas APIs. Os seguintes novos métodos foram adicionados como parte deste suporte:

Para obter mais informações sobre essas e outras melhorias, consulte a postagem do blog Aprimoramentos de expressão regular no .NET 7 .

Bibliotecas .NET

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

Description APIs Informações adicionais
Suporte para microssegundos e nanossegundos em TimeSpan, TimeOnly, DateTime, e DateTimeOffset tipos - DateTime.Microsecond
- DateTime.Nanosecond
- DateTime.AddMicroseconds(Double)
- Novas DateTime sobrecargas do construtor

- DateTimeOffset.Microsecond
- DateTimeOffset.Nanosecond
- DateTimeOffset.AddMicroseconds(Double)
- Novas DateTimeOffset sobrecargas do construtor

- 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, consulte a postagem do blog do .NET 7 Preview 4 .
APIs para leitura, gravação, arquivamento e extração de arquivos Tar System.Formats.Tar Para obter mais informações, consulte as postagens do blog .NET 7 Preview 4 e .NET 7 Preview 6 .
Limitar a taxa de APIs para proteger um recurso, mantendo o tráfego em um nível seguro RateLimiter e outros no pacote System.Threading.RateLimitando NuGet Para obter mais informações, consulte Limite de taxa um manipulador HTTP no .NET e Anunciando limite de taxa para .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 ReadExactly métodos leem exatamente o número de bytes solicitados e os novos ReadAtLeast métodos leem pelo menos o número de bytes solicitados. Para obter mais informações, consulte a postagem do blog do .NET 7 Preview 5 .
Novos conversores de tipo para DateOnly, TimeOnly, Int128, UInt128, e Half System.ComponentModel No namespace:

- DateOnlyConverter
- TimeOnlyConverter
- Int128Converter
- UInt128Converter
- HalfConverter
Os conversores de tipo são frequentemente 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 de métricas para IMemoryCache - MemoryCacheStatistics
- MemoryCache.GetCurrentStatistics()
GetCurrentStatistics() permite que você use contadores de eventos ou APIs de métricas para controlar estatísticas de um ou mais caches de memória. Para obter mais informações, consulte a postagem do blog do .NET 7 Preview 4 .
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 do 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 string parâmetro espera uma expressão regular atribuindo o parâmetro a [StringSyntax(StringSyntaxAttribute.Regex)].
APIs para interoperabilidade com JavaScript ao executar no navegador ou outras arquiteturas WebAssembly System.Runtime.InteropServices.JavaScript Os aplicativos JavaScript podem usar o suporte expandido a WebAssembly no .NET 7 para reutilizar bibliotecas .NET do JavaScript. Para obter mais informações, consulte 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 seu aplicativo à medida que ele é dimensionado e à medida que a complexidade técnica aumenta. . A implementação de observabilidade da NET é construída principalmente em torno do OpenTelemetry. As melhorias incluem:

Para obter mais informações, consulte a postagem do blog do .NET 7 Preview 4 .

SDK do .NET

O SDK do .NET 7 melhora a experiência do modelo 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 dotnet new comando e na criação de modelos.

dotnet novo

O dotnet new comando CLI, que cria um novo projeto, arquivo de configuração ou solução com base em um modelo, agora oferece suporte ao preenchimento de guias para explorar:

  • Nomes de modelos disponíveis
  • Opções do modelo
  • Valores de opção permitidos

Além disso, para melhor conformidade, os installsubcomandos , 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 modelo.

Também no arquivo de configuração do modelo, agora você pode anotar um parâmetro de modelo como permitindo vários valores. Por exemplo, o web modelo permite várias formas de autenticação.

Para obter mais informações, consulte a postagem do blog .NET 7 Preview 6 .

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 suportado do SDK do .NET e você pode criar versões em contêiner de seus aplicativos usando dotnet publisho . Para obter mais informações sobre o recurso, consulte Anunciando o suporte de contêiner interno para o SDK do .NET. Para obter um tutorial, consulte Containerize a .NET app with dotnet publish.

Gerenciamento central de pacotes

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

Para obter mais informações, consulte Gerenciamento central de pacotes.

P/Invoke geração de origem

O .NET 7 introduz um gerador de código-fonte para invocações de plataforma (P/Invokes) em C#. O gerador de código-fonte procura LibraryImportAttribute métodos para staticpartial acionar a geração de código-fonte em tempo de compilação do código de empacotamento. Ao gerar o código de empacotamento em tempo de compilação, nenhum stub IL precisa ser gerado em tempo de execução, como acontece ao usar DllImportAttributeo . O gerador de código-fonte melhora o desempenho do aplicativo e também permite que o aplicativo seja compilado à frente do tempo (AOT). Para obter mais informações, consulte Geração de código-fonte para invocações de plataforma e Usar marshallers personalizados em P/Invokes gerados pela fonte.

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, consulte Novidades no C# 11.

F# 7

O F# 7 continua a jornada para tornar a linguagem mais simples e melhorar o desempenho e a interoperabilidade com os novos recursos do C#. Para obter mais informações, consulte Anunciando o F# 7.

.NET MAUI

.NET Multi-platform App UI (.NET MAUI) é uma estrutura multiplataforma para criar aplicativos móveis e de desktop nativos com C# e XAML. Ele unifica as APIs do Android, iOS, macOS e Windows em uma única API. Para obter informações sobre as atualizações mais recentes, consulte O que há de novo no .NET MAUI para .NET 7.

ASP.NET Core

ASP.NET Core 7.0 inclui middleware de limitação de taxa, melhorias para APIs mínimas e transcodificação 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, desempenho aprimorado 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 feito no Windows Forms para .NET 7. Registaram-se melhorias nos seguintes domínios:

  • Acessibilidade
  • DPI e dimensionamento altos
  • Vinculação de dados

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

WPF

WPF no .NET 7 inclui inúmeras correções de bugs, bem como melhorias de desempenho e acessibilidade. Para obter mais informações, consulte a postagem do blog Novidades do WPF no .NET 7 .

Orleans

Orleans é uma estrutura multiplataforma para a criação de aplicativos distribuídos robustos e escaláveis. Para obter informações sobre as atualizações mais recentes do Orleans, consulte 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 oferece suporte à atualização de aplicativos WCF do lado do servidor para CoreWCF, que é uma porta criada pela comunidade do WCF para .NET (Core). Para obter mais informações, consulte Atualizar um projeto do lado do servidor WCF para usar CoreWCF.

ML.NET

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 mais recentes técnicas de aprendizado profundo de última geração. Para obter mais informações, consulte as postagens do blog Novidades com AutoML e ferramentas e Apresentando a API de classificação de texto ML.NET.

Consulte também