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.
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.
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.
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:
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.
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
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
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.
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
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
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.
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.
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.
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.
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:
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.
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.
A fonte deste conteúdo pode ser encontrada no GitHub, onde você também pode criar e revisar problemas e solicitações de pull. Para obter mais informações, confira o nosso guia para colaboradores.
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários: