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
Este artigo lista os novos recursos do .NET 7 e fornece links para informações mais detalhadas sobre cada um.
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:
- On-stack replacement (OSR) é um complemento à compilação em camadas. Permite que a execução do ambiente altere o código executado por um método atualmente em execução no meio da sua execução (ou seja, enquanto está "em 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 elementos adicionais, tais como delegados. - Geração de código melhorada para Arm64.
- Native AOT 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 no runtime Mono, que potencia 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 Melhorias de desempenho no .NET 7 postagem de blog.
Serialização System.Text.Json
O .NET 7 inclui melhorias na serialização System.Text.Json nas seguintes áreas:
- Personalização de contrato oferece mais controlo 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.
- O suporte para exige os membros, 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 estas e outras atualizações, consulte o post 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 Generic math e a postagem do blog Generic math.
Expressões regulares
A biblioteca de expressão regular de .NET viu melhorias funcionais e de desempenho significativas no .NET 7.
A nova opção RegexOptions.NonBacktracking permite correspondência usando uma abordagem que evita backtracking e assegura um processamento em tempo linear em relação ao comprimento da entrada. O mecanismo de "nonbacktracking" não pode ser usado numa pesquisa da direita para a esquerda e tem algumas outras restrições, mas é rápido para todas as expressões regulares e entradas. Para mais informações, consulte modo sem retrocesso.
Os geradores de origem de expressão regular são novos. Os geradores de código constroem um motor otimizado para o seu padrão em tempo de compilação, proporcionando benefícios de desempenho de processamento. A fonte emitida faz parte do seu projeto, permitindo assim que o utilizador visualize e depure. Além disso, um novo
SYSLIB1045
de diagnóstico 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 código-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 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 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:
- 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 de 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.
Descrição | APIs | Informações adicionais |
---|---|---|
Suporte para microssegundos e nanossegundos nos tipos TimeSpan, TimeOnly, DateTimee DateTimeOffset | - DateTime.Microsecond - DateTime.Nanosecond - DateTime.AddMicroseconds(Double) - Sobrecargas do construtor New DateTime - DateTimeOffset.Microsecond - DateTimeOffset.Nanosecond - DateTimeOffset.AddMicroseconds(Double) - Novas sobrecargas do 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, consulte a postagem de 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 de blog do .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.RateLimiting NuGet | Para obter mais informações, consulte Limitação de taxa de um manipulador HTTP no .NET e Anunciando limitação de taxa para .NET. |
APIs para ler todos os dados a partir de um Stream | - Stream.ReadExactly - Stream.ReadAtLeast |
Stream.Read podem retornar menos dados do que os disponíveis no fluxo. Os novos métodos ReadExactly lêem exatamente o número de bytes solicitados, e os novos métodos ReadAtLeast lêem pelo menos o número de bytes solicitados. Para obter mais informações, consulte a postagem de blog do .NET 7 Preview 5. |
Novos conversores de tipo para DateOnly , TimeOnly , Int128 , UInt128 e Half |
No separador de nomes System.ComponentModel: - 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 de 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 de 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 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 Utilizar o .NET a partir de qualquer aplicação JavaScript no .NET 7. |
Observabilidade
.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 do .NET é construída principalmente em torno de OpenTelemetry. As melhorias incluem:
- O novo evento Activity.CurrentChanged, que você pode usar para detetar quando o contexto de span de um thread gerenciado muda.
- Novos métodos de enumerador eficientes para as propriedades Activity: EnumerateTagObjects(), EnumerateLinks()e EnumerateEvents().
Para obter mais informações, consulte a postagem de blog do .NET 7 Preview 4.
SDK do .NET
O SDK do .NET 7 melhora a experiência do modelo de 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 novo
O comando dotnet new
CLI, que cria um novo projeto, ficheiro de configuração ou solução com base num modelo, agora oferece suporte à conclusão automática de separador para navegação:
- Nomes de modelos 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 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 modelo web
permite várias formas de autenticação.
Para obter mais informações, consulte a postagem do blog do .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 publish
. Para obter mais informações sobre o recurso, consulte Anunciando suporte de contêiner interno para o .NET SDK. Para obter um tutorial, consulte Conteinerizar uma aplicação .NET com 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, você adiciona um arquivo Directory.Packages.props ManagePackageVersionsCentrally
para 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 qualquer PackageReference itens que se referem a pacotes gerenciados centralmente.
Para obter mais informações, consulte Central package management.
P/Invoke geração de código-fonte
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 em static
, partial
métodos para 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 DllImportAttribute. O gerador de código melhora o desempenho da aplicação e também permite que a aplicação seja compilada antecipadamente (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 a partir do código-fonte.
Comunicados relacionados
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 texto brutos, tipos com escopo de arquivo e outros novos recursos. Para obter mais informações, consulte O que há de novo 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 Núcleo
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.
Núcleo EF
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 O que há de novo no EF Core 7.0.
Formulários do Windows
Muito trabalho foi feito no Windows Forms para .NET 7. Registaram-se melhorias nos seguintes domínios:
- Acessibilidade
- Altos DPI e dimensionamento
- Vinculação de dados
Para obter mais informações, consulte O que há de novo 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 o Novidades do WPF no .NET 7 postagem de blog.
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 para o Orleans, consulte Migrar do Orleans 3.x para o7.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 Upgrade um projeto do lado do servidor WCF para usar o 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 de blog Novidades do AutoML e ferramentas e Apresentando a API de Classificação de Texto ML.NET.