.NET 11 Preview 2: novidades do runtime, bibliotecas, ASP.NET Core e mais
O .NET 11 Preview 2 chegou em 10 de março de 2026 e traz melhorias importantes em praticamente todas as áreas da plataforma. Neste artigo, você confere o que mudou no runtime, no SDK, nas bibliotecas, no ASP.NET Core, no Blazor, no .NET MAUI, no F#, no Entity Framework Core e nas imagens de container.
Além disso, cada seção explica o impacto prático das mudanças e mostra exemplos de código baseados nas notas oficiais de lançamento.
O que é o .NET 11 Preview 2
O .NET 11 Preview 2 é a segunda versão de prévia do .NET 11, publicada pela Microsoft cerca de um mês depois do Preview 1. Assim como as demais prévias, ela serve para testes e coleta de feedback, e não para produção.
O .NET 11 segue o ciclo anual da plataforma e terá suporte padrão, ou seja, será uma versão Standard Term Support (STS). Por isso, o lançamento final está previsto para novembro de 2026.
Na prática, cada preview entrega uma fatia das funcionalidades planejadas. Portanto, acompanhar essas versões ajuda a antecipar mudanças e a planejar migrações com calma.
Se você quer entender de onde partimos, vale ler também o resumo das novidades do runtime no .NET 11 Preview 1, que antecede esta versão.
Runtime Async V2 no .NET 11 Preview 2
A atualização mais relevante do runtime no .NET 11 Preview 2 é a segunda iteração do Runtime Async. Em outras palavras, o runtime começa a assumir um papel que pertencia apenas ao compilador.
Desde que o C# 5 introduziu async e await, o compilador reescreve cada método assíncrono em uma máquina de estados. Essa máquina rastreia os pontos de suspensão e retoma a execução depois de cada await.
Com o Runtime Async, o próprio runtime passa a entender métodos assíncronos como um conceito nativo. Dessa forma, ele mesmo cuida de suspender e retomar a execução, sem depender das classes geradas pelo compilador.
O objetivo é reduzir o overhead em caminhos assíncronos críticos. Além disso, a mudança habilita um suporte melhor a ferramentas, como rastreamentos de pilha mais precisos e profiling de cargas assíncronas.
Como habilitar o Runtime Async
Para experimentar o Runtime Async no nível do compilador, adicione as seguintes propriedades ao arquivo de projeto:
<PropertyGroup>
<!-- Habilita recursos em preview e o runtime async no compilador -->
<EnablePreviewFeatures>true</EnablePreviewFeatures>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>
No lado do CoreCLR, o suporte já vem habilitado por padrão no .NET 11 Preview 2. Assim, você não precisa configurar nenhuma variável de ambiente para ativar o recurso.
Pilhas de chamadas mais limpas
O ganho mais visível aparece nas pilhas de chamadas observadas durante a execução. Por exemplo, considere três métodos assíncronos aninhados, em que o último imprime a pilha atual:
using System.Diagnostics;
await OuterAsync();
static async Task OuterAsync()
{
await Task.CompletedTask;
await MiddleAsync();
}
static async Task MiddleAsync()
{
await Task.CompletedTask;
await InnerAsync();
}
static async Task InnerAsync()
{
await Task.CompletedTask;
// Imprime a pilha de chamadas viva neste ponto
Console.WriteLine(new StackTrace(fNeedFileInfo: true));
}
Sem o Runtime Async, esse código produz 13 frames, muitos deles ligados à infraestrutura da máquina de estados. Com o recurso ligado, a mesma pilha mostra apenas 5 frames, ou seja, a hierarquia real de chamadas.
Isso beneficia profilers, depuradores e qualquer ferramenta de diagnóstico que inspeciona a pilha em tempo de execução. Além disso, os breakpoints agora funcionam corretamente dentro desses métodos, e o depurador atravessa os await sem entrar no código gerado.
Melhorias no JIT e na VM do .NET 11 Preview 2
O .NET 11 Preview 2 também traz melhorias no compilador JIT, que beneficiam diretamente a performance em tempo de execução. Em primeiro lugar, o JIT elimina verificações de limites redundantes em padrões como i + constante < length.
Além disso, o compilador remove verificações de overflow que ele consegue provar desnecessárias. Também chegaram a desvirtualização de métodos virtuais genéricos em imagens ReadyToRun e novos intrínsecos SVE2 para processadores Arm.
Outra adição relevante é o cached interface dispatch, uma otimização na máquina virtual que reduz o custo de chamadas de interface. Segundo as notas oficiais, plataformas sem JIT, como o iOS, chegam a ganhos de até 200 vezes em código com uso intenso de interfaces.
Por fim, o Guid.NewGuid() no Linux passou a usar a syscall getrandom() com cache em lote. Com isso, a geração de GUIDs ganhou cerca de 12% de vazão em relação à leitura de /dev/urandom.
Bibliotecas do .NET 11 Preview 2
As bibliotecas base receberam ajustes pontuais, mas úteis no dia a dia. A seguir, você confere os três destaques do .NET 11 Preview 2 nessa área.
GetTypeInfo genérico no System.Text.Json
O System.Text.Json ganhou os métodos genéricos GetTypeInfo<T>() e TryGetTypeInfo<T>() em JsonSerializerOptions. Antes, era preciso chamar a versão não genérica e fazer um cast manual do resultado.
using System.Text.Json;
using System.Text.Json.Serialization.Metadata;
var options = JsonSerializerOptions.Default;
// Antes: versão não genérica com cast manual
var oldInfo = (JsonTypeInfo<Customer>)options.GetTypeInfo(typeof(Customer));
// Agora: versão genérica e fortemente tipada
JsonTypeInfo<Customer> info = options.GetTypeInfo<Customer>();
if (options.TryGetTypeInfo<Customer>(out JsonTypeInfo<Customer>? typeInfo))
{
// Usa os metadados de serialização do tipo
Console.WriteLine(typeInfo.Type.Name);
}
public record Customer(string Name, string Email);
Essa mudança melhora a usabilidade ao trabalhar com JsonSerializerContext. Além disso, ela ajuda em cenários de Native AOT e de serialização polimórfica, em que o acesso a metadados é frequente e a reflexão deve ser evitada.
Seleção de formato para arquivos Tar
A API de arquivos Tar agora permite escolher o formato do arquivo gerado. Para isso, o método TarFile.CreateFromDirectory recebe um parâmetro TarEntryFormat, com suporte a Pax, Ustar, GNU e V7.
using System.Formats.Tar;
// Formato GNU para compatibilidade com ferramentas Linux
TarFile.CreateFromDirectory("/source/dir", "/dest/archive.tar",
includeBaseDirectory: true, TarEntryFormat.Gnu);
// Versão assíncrona com cancelamento
await TarFile.CreateFromDirectoryAsync("/source/dir", "/dest/archive-pax.tar",
includeBaseDirectory: true, TarEntryFormat.Pax, CancellationToken.None);
Dessa forma, você ganha mais controle sobre a compatibilidade com ferramentas externas que esperam um formato específico.
Matrix4x4.GetDeterminant mais rápido
O método GetDeterminant da struct Matrix4x4 recebeu uma implementação vetorizada com SSE. Segundo as notas de lançamento, o tempo caiu de 3,487 ns para 2,971 ns, uma melhoria de aproximadamente 15%.
Essa otimização importa para aplicações com uso intensivo de transformações matemáticas, como engines de jogos e simulações físicas. Para outras novidades da mesma área em prévias seguintes, veja o que mudou nas bibliotecas do .NET 11 Preview 3.
SDK do .NET 11 Preview 2
O SDK também evoluiu no .NET 11 Preview 2, principalmente em tamanho e em diagnósticos. Essas mudanças afetam desde a máquina do desenvolvedor até os pipelines de CI/CD.
Instaladores menores no Linux e macOS
Os instaladores do SDK para Linux e macOS ficaram bem menores. De acordo com a equipe, 35% do diretório do SDK era composto por arquivos duplicados, o que somava 816 arquivos e 140 MB em disco.
A solução identifica arquivos .dll e .exe repetidos pelo hash do conteúdo e os troca por links simbólicos. Com isso, no Linux x64, o tarball caiu de 230 MB para 189 MB, enquanto os pacotes DEB e RPM caíram para cerca de 122 MB.
No Windows, a deduplicação ainda está planejada para uma versão futura. Portanto, por enquanto o ganho vale apenas para Linux e macOS.
Analisadores de código e novos avisos
A regra CA1873, que aponta operações de log potencialmente caras, recebeu duas melhorias. Primeiro, ela gera menos falsos positivos, porque acessos a propriedades, GetType() e GetHashCode() deixam de disparar o aviso.
Em segundo lugar, as mensagens agora explicam o motivo do alerta, como uma invocação de método ou uma interpolação de string. Além disso, a equipe corrigiu falsos positivos nas regras CA1515, CA1034 e CA1859.
O SDK também passa a emitir o aviso NETSDK1235 quando um projeto combina PackAsTool=true com um arquivo .nuspec personalizado. Afinal, pacotes de ferramenta exigem uma estrutura específica que esses arquivos costumam violar.
ASP.NET Core e Blazor no .NET 11 Preview 2
O ASP.NET Core e o Blazor receberam algumas das novidades mais práticas do .NET 11 Preview 2. Algumas delas eliminam pacotes extras, enquanto outras trazem recursos já conhecidos do MVC.
Rastreamento nativo com OpenTelemetry
O ASP.NET Core agora inclui por padrão os atributos das convenções semânticas do OpenTelemetry. Antes, esses metadados exigiam a biblioteca OpenTelemetry.Instrumentation.AspNetCore.
var builder = WebApplication.CreateBuilder(args);
// Basta assinar a fonte de atividades do ASP.NET Core
builder.Services.AddOpenTelemetry()
.WithTracing(tracing => tracing
.AddSource("Microsoft.AspNetCore")
.AddConsoleExporter());
var app = builder.Build();
app.MapGet("/", () => "Hello World");
app.Run();
Assim, o framework preenche atributos como http.request.method, url.path e http.response.status_code. Caso precise desligar o comportamento, use o switch Microsoft.AspNetCore.Hosting.SuppressActivityOpenTelemetryData.
TempData no Blazor
Os componentes Blazor renderizados no servidor passam a suportar TempData, recurso já conhecido no MVC e no Razor Pages. Na prática, ele facilita mensagens após o envio de formulários e o padrão POST, Redirect, GET.
O TempData funciona como um valor em cascata, registrado automaticamente ao chamar AddRazorComponents(). Além disso, a interface ITempData oferece Get, Peek e Keep, e um provedor baseado em sessão complementa o padrão baseado em cookies.
Suporte a OpenAPI 3.2.0
O .NET 11 Preview 2 adiciona suporte à especificação OpenAPI 3.2.0 por meio de uma dependência atualizada. Você pode escolher a versão explicitamente:
builder.Services.AddOpenApi(options =>
{
// Gera o documento na versão 3.2 da especificação
options.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_2;
});
Contudo, a atualização traz breaking changes, por isso exige atenção ao migrar projetos com geração automática de documentação. Se você gera o documento durante o build, vale revisar como funciona o OpenAPI do ASP.NET Core em tempo de build.
Template de Web Worker
Um novo template permite mover processamento pesado para Web Workers do navegador. Dessa forma, a interface de aplicações Blazor WebAssembly continua responsiva enquanto o cálculo roda em segundo plano.
dotnet new webworker -n MyWebWorker
Os métodos do worker usam o atributo [JSExport] e podem ser chamados pelo WebWorkerClient. Para um passo a passo completo, leia o artigo sobre Web Workers no Blazor com .NET 11.
Performance e passkeys
O parser HTTP/1.1 do Kestrel deixou de lançar exceções para requisições malformadas. Segundo as notas, isso melhora a vazão em até 20% a 40% em cenários com varreduras de portas ou clientes mal configurados.
Além disso, o middleware de log HTTP passou a reutilizar streams de buffer. Por fim, o template Blazor Web App agora nomeia automaticamente as passkeys de autenticadores conhecidos, como Windows Hello, iCloud Keychain e 1Password.
Entity Framework Core no .NET 11 Preview 2
O EF Core 11 avançou bastante no .NET 11 Preview 2, sobretudo para quem usa SQL Server. As novidades cobrem LINQ, busca vetorial, busca textual e JSON.
LINQ MaxBy e MinBy
O EF Core passa a traduzir os operadores MaxBy e MinBy diretamente para SQL. Assim, você elimina consultas adicionais ou processamento no lado do cliente.
// Retorna o pedido de maior valor sem carregar todos na memória
var largestOrder = await context.Orders
.Where(order => order.CustomerId == customerId)
.MaxByAsync(order => order.TotalAmount);
Na prática, a consulta fica mais legível e o banco faz todo o trabalho de ordenação.
Busca vetorial com DiskANN no SQL Server
O EF Core adiciona suporte a índices vetoriais DiskANN no SQL Server e à função VECTOR_SEARCH(). Essa funcionalidade interessa a aplicações que usam embeddings e busca semântica em cenários de IA.
Se esse tema faz parte do seu projeto, o artigo sobre dados vetoriais no .NET com Microsoft.Extensions.VectorData complementa bem esta leitura.
Full-text search e JSON no SQL Server
Agora você cria catálogos e índices de texto completo do SQL Server diretamente pelas migrations do EF Core. Além disso, as funções FREETEXTTABLE() e CONTAINSTABLE() passam a ter suporte.
A função JSON_CONTAINS(), introduzida no SQL Server 2025, também chega às consultas LINQ. Com isso, você filtra colunas JSON de forma mais expressiva, sem recorrer a SQL puro.
.NET MAUI no .NET 11 Preview 2
O .NET MAUI recebeu melhorias de API, de performance e de plataforma no .NET 11 Preview 2. Algumas delas exigem atenção, porque mudam requisitos mínimos.
Controle Map e TypedBinding
O controle Map ganhou TypeConverters que simplificam o XAML, permitindo escrever Region="36.9628,-122.0195,0.01,0.01". Além disso, círculos, polígonos e polilinhas ganharam IsVisible, ZIndex e eventos de clique no Android, iOS e Mac Catalyst.
O TypedBinding, que evita boxing em bindings fortemente tipados, ficou cerca de 29% mais rápido. Ao mesmo tempo, ele aloca 50% menos memória por operação de binding.
Color, Font e VisualStateManager
A struct Color recebeu anotações de imutabilidade, enquanto Font virou uma readonly struct. Dessa forma, o contrato fica mais claro e a geração de código XAML melhora.
Por outro lado, VisualStateManager.GetVisualStateGroups agora retorna VisualStateGroupList em vez de IList<VisualStateGroup>. Portanto, essa breaking change pode afetar algumas implementações.
Android exige API 24 com CoreCLR
A partir do .NET 11 Preview 2, o CoreCLR no Android exige API level 24 ou superior, o que equivale ao Android 7.0 Nougat. Enquanto isso, o Mono continua suportando a API 21 ou superior.
Aplicações que precisam atender versões anteriores do Android devem avaliar essa mudança com atenção. Além disso, iOS, tvOS e Mac Catalyst ganharam suporte experimental ao CoreCLR com <UseMonoRuntime>false</UseMonoRuntime>, tema detalhado no artigo sobre a migração do .NET MAUI para o CoreCLR.
F# e imagens de container no .NET 11 Preview 2
O F# também recebeu novidades no .NET 11 Preview 2. Entre elas estão hierarquias de interface com DIM simplificadas, cache de resolução de sobrecarga, a diretiva #elif e a função partitionWith para coleções.
O cache de resolução de sobrecarga merece destaque, porque reduz bastante o custo de compilação. Por exemplo, em um arquivo com 5.000 chamadas a Assert.Equal, a checagem de tipos caiu de 6,5 segundos no SDK do .NET 10 para 2,9 segundos.
Já as imagens de container do SDK ficaram até 17% menores, graças à eliminação de arquivos duplicados com hard links. Na Alpine 3.23, por exemplo, a economia chega a cerca de 43 MB, o que beneficia pipelines baseados em Docker e Kubernetes.
Para C# e Visual Basic, a Microsoft não anunciou novos recursos de linguagem nem breaking changes nesta prévia.
Como instalar o .NET 11 Preview 2
Para instalar o .NET 11 Preview 2, acesse a página oficial de download do .NET 11. Depois, confirme a versão instalada pelo terminal:
dotnet --list-sdks
No Windows, a recomendação é usar o Visual Studio 2026 Insiders. Já no macOS e no Linux, o VS Code com a extensão C# Dev Kit oferece suporte completo.
Lembre-se de que versões de prévia não têm suporte para produção. Por isso, teste em projetos isolados ou em branches separadas antes de adotar qualquer recurso.
Conclusão
O .NET 11 Preview 2 mostra uma plataforma que evolui em várias frentes ao mesmo tempo. O Runtime Async V2 se destaca, porque muda a forma como o código assíncrono funciona por baixo dos panos.
Além disso, as melhorias no SDK, no EF Core e no ASP.NET Core trazem ganhos imediatos de produtividade e de observabilidade. Portanto, vale experimentar o .NET 11 Preview 2 agora e enviar feedback antes da versão final, prevista para novembro de 2026.
FAQ
Quando o .NET 11 Preview 2 foi lançado?
A Microsoft lançou o .NET 11 Preview 2 em 10 de março de 2026. A versão final do .NET 11 está prevista para novembro de 2026.
Posso usar o .NET 11 Preview 2 em produção?
Não é recomendado, porque versões de prévia não têm suporte para produção. Use-as para testes e para enviar feedback à Microsoft.
O .NET 11 será LTS?
Não. O .NET 11 será uma versão Standard Term Support (STS), com um período de suporte menor que o das versões LTS.
Como ativar o Runtime Async?
Adicione EnablePreviewFeatures como true e runtime-async=on na propriedade Features do arquivo de projeto. O suporte do CoreCLR já vem ligado por padrão nesta prévia.
O que muda para apps Android com .NET MAUI?
Com o CoreCLR, o Android passa a exigir API 24 ou superior. Apps que usam o Mono continuam suportando a API 21.