Lançado o .NET 11 Preview 4

O .NET 11 Preview 4 saiu em 12 de maio de 2026 e avança em várias frentes ao mesmo tempo: a maior atualização em anos da API de processos, Runtime Async nas bibliotecas, um template oficial para servidores MCP no ASP.NET Core e busca vetorial aproximada no Entity Framework Core para SQL Server 2025. Neste artigo, você vai entender cada novidade com exemplos de código e contexto técnico, antes do lançamento oficial previsto para novembro de 2026.

Visão geral do .NET 11 Preview 4

O .NET 11 Preview 4 cobre seis grandes áreas: bibliotecas de classe base, runtime, SDK, C#, ASP.NET Core e Entity Framework Core. Além disso, cada área recebe contribuições da equipe da Microsoft e da comunidade open source.

O foco do release fica claro em quatro pontos. Primeiro, produtividade na linha de comando com melhorias no SDK.

Em seguida, observabilidade com métricas nativas para MemoryCache. Por fim, a preparação do runtime para discriminated unions no C# e a consolidação de APIs de alto desempenho baseadas em Span<T>.

O anúncio completo está no post oficial do .NET 11 Preview 4, com notas de release separadas por área no GitHub.

Expansão da API de Process

Uma das adições mais aguardadas é a expansão de System.Diagnostics.Process, que o próprio anúncio descreve como a maior atualização da classe em anos. Até o .NET 10, capturar a saída de um processo exigia configurar eventos como OutputDataReceived e ErrorDataReceived.

Você também precisava gerenciar buffers e lidar com condições de corrida. Por isso, muito código de produção acabava com deadlocks difíceis de reproduzir.

Captura de saída em uma única chamada

O .NET 11 Preview 4 introduz Process.Run, Process.RunAsync, Process.RunAndCaptureText e Process.RunAndCaptureTextAsync. Esses métodos resolvem o caso mais comum, que é rodar um comando e capturar a saída, em uma única chamada.

using System.Diagnostics;

// executa o git e captura stdout, stderr e o código de saída
ProcessTextOutput result = await Process.RunAndCaptureTextAsync(
    "git", ["status", "--porcelain"]);

Console.WriteLine(result.StandardOutput);
Console.WriteLine($"Exit code: {result.ExitStatus.ExitCode}");

Além disso, Process.ReadAllText, Process.ReadAllBytes e suas variantes assíncronas leem a saída padrão de um processo filho sem boilerplate.

Para saída orientada a linhas, o novo tipo ProcessOutputLine distingue stdout de stderr ao usar Process.ReadAllLinesAsync. Assim, você não precisa mais fazer parsing manual dos streams.

Processos desanexados e controle de handles

O método Process.StartAndForget inicia um processo filho quando você não pretende esperar por ele. Já a propriedade ProcessStartInfo.StartDetached desanexa o filho da sessão e do console do pai, então ele continua rodando mesmo depois que o terminal fecha.

No Windows, ProcessStartInfo.KillOnParentExit faz o oposto. Nesse caso, o sistema encerra o filho automaticamente quando o pai termina, o que ajuda a gerenciar subprocessos em hosts.

A classe SafeProcessHandle também ganhou Start, ProcessId, Kill, Signal, WaitForExit e WaitForExitAsync. Com isso, você gerencia o ciclo de vida de processos sem depender da classe Process.

Outra novidade, ProcessStartInfo.InheritedHandles, resolve um problema antigo de segurança. Afinal, ela define exatamente quais handles o filho herda, em vez do comportamento tudo ou nada de UseShellExecute = false.

Por fim, no Linux e no macOS, o runtime deixou de alocar strings e arrays intermediários para envp e argv ao lançar processos. Dessa forma, a pressão sobre o GC cai em cenários de alta concorrência.

APIs Span-based para compressão

No .NET 11 Preview 4, o namespace System.IO.Compression recebe APIs baseadas em Span<byte> e ReadOnlySpan<byte> para Deflate, ZLib e GZip. O design segue o padrão de BrotliEncoder e BrotliDecoder e das APIs de Zstandard que chegaram recentemente.

using System.IO.Compression;

ReadOnlySpan<byte> source = File.ReadAllBytes("payload.bin");
Span<byte> destination = new byte[source.Length];

// comprime sem alocar nenhum Stream intermediário
using ZLibEncoder encoder = new();
OperationStatus status = encoder.Compress(
    source, destination,
    out int bytesConsumed,
    out int bytesWritten,
    isFinalBlock: true);

A ausência de Stream importa muito para parsers de protocolo e middleware de alto throughput. Da mesma forma, pipelines de dados que já trabalham com spans ganham desempenho sem adaptações.

Formatação hexadecimal de ponto flutuante

Os tipos double, float e Half passam a suportar formatação e parsing na representação hexadecimal IEEE 754. Esse formato preserva todos os bits do valor, então o round-trip não perde precisão.

Na prática, ele serve para testes com arquivos de referência, os chamados golden files. Também ajuda na interoperabilidade com C e C++ via printf("%a", ...).

double value = Math.PI;

string hex = value.ToString("X");
double roundTrip = double.Parse(hex, NumberStyles.HexFloat);

// True: o round-trip é exato
Console.WriteLine(roundTrip == value);

Validação de UTF no .NET 11 Preview 4

O namespace System.Text.Unicode recebe dois métodos complementares no .NET 11 Preview 4. Primeiro, Utf16.IsValid verifica se uma sequência é UTF-16 bem formada sem varrer o texto duas vezes.

Depois, Utf8.IndexOfInvalidSubsequence e Utf16.IndexOfInvalidSubsequence retornam a posição do primeiro trecho malformado, ou -1 quando tudo está válido. Assim, parsers e serializadores produzem mensagens de erro precisas, em vez de um genérico "encoding error".

Runtime Async e JIT no .NET 11 Preview 4

O runtime do .NET 11 avança no suporte nativo a async, chamado de Runtime Async. No .NET 11 Preview 4, as bibliotecas do runtime passam a ser compiladas com o modo runtime-async ativado.

Como resultado, os stack traces ficam mais limpos e o overhead de alocação cai em código assíncrono intensivo. Ou seja, o próprio runtime funciona como validação em larga escala do recurso.

As otimizações do JIT incluem eliminação de bounds checks e remoção de contextos checked redundantes. Além disso, o JIT dobra switch expressions e ganha novas intrínsecas para Arm SVE2.

Essas melhorias pesam em workloads de alto throughput, como APIs web, processamento de mensagens e pipelines de dados.

Melhorias no SDK

O SDK do .NET 11 Preview 4 recebe quatro melhorias notáveis. Primeiro, o dotnet watch passa a selecionar dispositivos em projetos .NET MAUI e mobile, então você escolhe o dispositivo ou emulador direto pela CLI.

Em segundo lugar, os completions do Fish shell alcançam a mesma cobertura de Bash, Zsh e PowerShell. Em terceiro, comandos como dotnet reference e dotnet add package usam o diretório atual como fallback quando nenhum projeto é informado.

Por fim, a telemetria da CLI troca o Application Insights pelo OpenTelemetry. Dessa forma, a ferramenta segue o mesmo padrão de diagnóstico adotado pelo ecossistema.

No C#, o release também traz um diagnóstico mais claro para diretivas shebang #! fora do lugar e um cache de compilação opcional para o servidor de build VBCSCompiler.

ASP.NET Core no .NET 11 Preview 4

O ASP.NET Core concentra algumas das mudanças mais visíveis do .NET 11 Preview 4. A seguir estão os pontos que mais afetam o dia a dia.

Template de servidor MCP

O template para servidores MCP (Model Context Protocol) passa a vir junto com o SDK do .NET. Portanto, qualquer pessoa com o .NET 11 instalado cria um servidor MCP com um único dotnet new, sem instalar pacotes extras.

Essa integração mostra como a Microsoft aposta no MCP como protocolo padrão entre LLMs e ferramentas externas. Se o tema for novo para você, comece pelo artigo o que é MCP e depois veja o SDK oficial do MCP para C#.

Blazor, OpenAPI e Kestrel

No Blazor, o atributo [SupplyParameterFromTempData] alimenta parâmetros de componentes a partir do TempData. Assim, o padrão post-redirect-get fica mais simples.

O servidor também pode pausar um circuito ativo do Blazor Server. Isso ajuda em cenários de manutenção, porque o cliente não cai de forma abrupta.

O componente Virtualize mantém o viewport estável quando o conteúdo acima dele muda. Além disso, o novo AnchorMode configura a ancoragem em operações de prepend e append.

No OpenAPI, o método HTTP QUERY aparece nos documentos gerados, e os tipos FileResult entram na especificação automaticamente. Já os endpoint filters passam a observar falhas de binding de parâmetros nas Minimal APIs.

O Kestrel ganha observabilidade do handshake TLS. Com isso, você acompanha métricas e erros da negociação diretamente via OpenTelemetry.

EF Core no .NET 11 Preview 4

O EF Core traz novidades alinhadas a workloads de IA e dados semiestruturados. A principal delas leva a busca vetorial aproximada do SQL Server 2025 para consultas LINQ, sem SQL manual.

// retorna os 10 produtos mais próximos do embedding da consulta
var results = await context.Products
    .OrderBy(p => EF.Functions.VectorDistance("cosine", p.Embedding, queryEmbedding))
    .Take(10)
    .ToListAsync();

Para quem trabalha com embeddings fora do EF, o artigo sobre dados vetoriais no .NET complementa bem esse tema.

O mapeamento JSON agora se integra por completo ao modelo relacional. Assim, propriedades JSON participam de consultas LINQ com a tradução adequada para SQL.

As propriedades de período temporal também podem virar propriedades CLR. Desse modo, tabelas temporais do SQL Server ficam mais idiomáticas no modelo de domínio.

Por fim, o dotnet ef lê configurações padrão de um arquivo dotnet-ef.json no diretório do projeto. Isso simplifica pipelines de CI que aplicam migrações automaticamente.

Métricas nativas para MemoryCache

A partir do .NET 11 Preview 4, o Microsoft.Extensions.Caching.Memory.MemoryCache passa a emitir métricas compatíveis com OpenTelemetry. O novo meter publica quatro instrumentos:

  • O dotnet.cache.requests conta requisições, com uma tag que separa hit de miss.
  • Já o dotnet.cache.evictions registra o total de remoções.
  • O dotnet.cache.entries mostra a quantidade de entradas.
  • Por fim, o dotnet.cache.estimated_size informa o tamanho estimado.
var options = new MemoryCacheOptions
{
    // ativa a coleta de estatísticas e a emissão das métricas
    TrackStatistics = true
};

var cache = new MemoryCache(options, loggerFactory, meterFactory);

A propriedade TrackStatistics = true ativa a emissão. Com um IMeterFactory injetado, você obtém métricas por instância; sem ele, os instrumentos se agregam em um meter compartilhado pelo processo.

Suporte a discriminated unions no runtime

O .NET 11 Preview 4 introduz UnionAttribute e IUnion no namespace System.Runtime.CompilerServices. Esses tipos formam a camada de runtime da longa discussão sobre discriminated unions no C#.

Por enquanto, o código de usuário não usa esses tipos diretamente. Afinal, a produção de uniões ainda depende do compilador C# e de source generators que consomem os atributos.

Mesmo assim, a chegada dos tipos ao runtime indica que a base está pronta para as próximas previews do C# 15. Para acompanhar essa evolução, veja o artigo sobre union types no .NET 11.

Melhorias de TLS e HTTP

O SslStream recebe correções de bounds checking no TlsFrameHelper do lado servidor. Com isso, registros ClientHello malformados deixam de gerar IOException inesperadas.

No Linux, falhas de validação de certificado chegam ao peer como alertas TLS padrão, como já acontecia no Windows. Antes, o cliente via a conexão cair; agora, recebe um erro de handshake acionável.

O HttpClient também faz downgrade automático de HTTP/2 para HTTP/1.1 quando a requisição exige autenticação Windows (NTLM ou Negotiate). Isso acontece porque o HTTP/2 proíbe os esquemas de autenticação ligados à conexão.

Dessa forma, aplicações em redes corporativas funcionam sem configurar HttpRequestMessage.Version manualmente.

Breaking changes do .NET 11 Preview 4

Três breaking changes do .NET 11 Preview 4 merecem atenção. Primeiro, o Microsoft.Extensions.Logging move tipos internos para novos locais e deixa shims de compatibilidade marcados como [Obsolete].

Por isso, autores de bibliotecas de logging e de source generators devem migrar para os novos namespaces.

Em segundo lugar, o System.Security.Cryptography.Xml passa a rejeitar entradas XML assinadas ou criptografadas que antes aceitava. Portanto, revise o XML assinado de terceiros antes de atualizar.

Por último, o System.DirectoryServices.AccountManagement agora escapa valores de filtros LDAP automaticamente. Logo, aplicações que já faziam o escape manual podem gerar filtros diferentes após a atualização.

Como começar com o .NET 11 Preview 4

O SDK do .NET 11 Preview 4 está disponível em dotnet.microsoft.com/download/dotnet/11.0. No Windows, a IDE recomendada é o Visual Studio 2026 Insiders.

Também é possível usar o VS Code com a extensão C# Dev Kit. Em ambos os casos, confira as novidades do .NET 11 no Microsoft Learn para acompanhar a documentação atualizada.

Lembre que previews não devem ir para produção. Use o .NET 11 Preview 4 para avaliar recursos, testar compatibilidade e enviar feedback à Microsoft antes de novembro de 2026.

Conclusão

O .NET 11 Preview 4 mostra a amplitude das melhorias planejadas para o lançamento de novembro de 2026. A nova API de Process resolve um problema antigo de ergonomia que afetava quase todo desenvolvedor que interage com processos externos.

No ASP.NET Core, o template nativo para servidores MCP evidencia o compromisso da Microsoft com ferramentas de IA na plataforma. Já o EF Core, com busca vetorial para SQL Server 2025, vira uma opção viável para RAG e busca por similaridade.

As métricas nativas do MemoryCache reduzem o atrito para adotar observabilidade. Portanto, quem trabalha com aplicações corporativas, IA ou alto throughput tem bons motivos para avaliar o .NET 11 Preview 4 desde já.

FAQ

O .NET 11 já pode ser usado em produção?

Não. O .NET 11 ainda está em preview, e o lançamento estável está previsto para novembro de 2026.

Qual a diferença entre Runtime Async e o async/await convencional?

No modelo convencional, o compilador transforma o método em uma state machine. No Runtime Async, o runtime assume parte desse trabalho e entrega stack traces mais legíveis e menos alocações.

O template de servidor MCP já existe no .NET 10?

Não. O template oficial vem com o SDK do .NET 11, enquanto no .NET 10 você cria o projeto manualmente ou usa pacotes adicionais.

A busca vetorial aproximada do EF Core exige SQL Server 2025?

Sim. O recurso depende dos índices vetoriais nativos que o SQL Server 2025 introduziu.

O que é ProcessStartInfo.InheritedHandles?

É uma propriedade que define exatamente quais handles do sistema operacional o processo filho herda. Isso melhora a segurança e o controle de recursos.

O ConfigurationIgnoreAttribute substitui alguma abordagem anterior?

Sim. Antes era preciso recorrer a converters ou convenções de nomes para excluir propriedades do binding, e o [ConfigurationIgnore] do .NET 11 resolve isso de forma declarativa.

A troca de telemetria da CLI afeta meus projetos?

Não. A mudança vale apenas para a telemetria interna da CLI, e seus projetos continuam usando Application Insights ou OpenTelemetry normalmente.