O tracker do .NET 11
Um favorito para o ciclo inteiro do .NET 11.
Este pilar reúne tudo o que escrevi sobre .NET 11: previews, mudanças no runtime, atualizações do GC, trabalho no JIT e a nova superfície da BCL. Salve esta página nos favoritos e eu mantenho ela atualizada a cada nova preview.
Por onde começar
Se você está começando agora no .NET 11, comece pelos posts com a tag “.net 11 preview” no topo da lista. Cada um cobre os destaques de uma preview. Os mais antigos continuam úteis porque o conjunto de recursos do .NET 11 é cumulativo.
O que tem nesta página
A tabela abaixo é gerada automaticamente a partir de posts com qualquer uma das tags: .net 11, dotnet 11, .net 11 preview, dotnet, .net. Um job semanal reordena tudo para que a cobertura mais recente suba ao topo.
Se você quer a referência rápida em formato de cheat sheet em vez da cobertura cronológica, confira os pilares complementares “EF Core 11 cheat sheet” e “Recursos do C# 14” linkados no índice /pillars/.
Índice (164 posts)
2026 / 05
- .NET 11 adiciona captura de saída de processos livre de deadlock
.NET 11 Preview 4 traz novas APIs em System.Diagnostics.Process que drenam stdout e stderr em paralelo, helpers de uma linha para executar e capturar, e KillOnParentExit.
- Correção: o build do Gradle falhou em produzir um arquivo .apk no MAUI Android
Nove em cada dez vezes o erro real do Gradle está enterrado mais acima no log do MSBuild. Caminho do JDK 17, workload maui-android ausente e caminhos longos no Windows são as causas raiz mais comuns.
- Fix: A possible object cycle was detected
System.Text.Json se recusa a serializar grafos com referências circulares. Configure ReferenceHandler.IgnoreCycles, projete para um DTO, ou marque o ponteiro de volta com [JsonIgnore]. Preserve é último recurso.
- Correção: SqlException: Timeout expired durante migrações do EF Core
As migrações usam o DbContext de tempo de design, não o seu CommandTimeout de runtime. Defina o timeout via UseSqlServer(o => o.CommandTimeout(...)), o Command Timeout da string de conexão, ou Database.SetCommandTimeout antes de Migrate().
- Fix: System.Text.Json.JsonException: The JSON value could not be converted
System.Text.Json lança esta exceção quando o token JSON recebido não corresponde ao tipo CLR de destino. Faça o JSON corresponder ao tipo, ou registre um JsonConverter ou uma JsonSerializerOption que os reconcilie.
- Solução: System.Security.Cryptography.CryptographicException: Keyset does not exist
A chave privada do certificado mora em um arquivo de chaves do Windows que a identidade do processo não consegue ler. Ajuste a ACL, carregue o PFX com MachineKeySet ou use EphemeralKeySet.
- Correção: The command 'dotnet' could not be found no CI
Seu runner de CI não consegue resolver dotnet porque o SDK não está instalado para esse passo, ou está instalado mas fora do PATH. Use actions/setup-dotnet, fixe um global.json e exporte DOTNET_ROOT e ~/.dotnet/tools.
- Correção: System.IO.FileNotFoundException: Could not load file or assembly em um app publicado
Funciona com dotnet run, falha após dotnet publish. A DLL geralmente está faltando na pasta de publicação, não no runtime. Verifique deps.json, Private em ProjectReference e trimming.
- Correção: InvalidOperationException: Synchronous operations are disallowed
Substitua a chamada Stream.Read ou Write por ReadAsync/WriteAsync. Como último recurso, defina AllowSynchronousIO no Kestrel, IIS ou por requisição via IHttpBodyControlFeature.
- Fix: RZ10012: Found markup element with unexpected name no Blazor
O compilador Razor do Blazor emite RZ10012 quando uma tag em PascalCase não tem um tipo de componente correspondente no escopo. Adicione @using para o namespace do componente em _Imports.razor, ou @namespace no componente, e recompile.
- Fix: dotnet ef migrations add falha com 'Unable to create an object of type DbContext'
As ferramentas em tempo de design do EF Core não conseguiram instanciar seu DbContext. Exponha um host com WebApplication.CreateBuilder, aponte para o startup project correto ou implemente IDesignTimeDbContextFactory.
- Fix: MSB3027 Could not copy X to Y. Exceeded retry count of 10. Failed
MSB3027 significa que o MSBuild tentou copiar um arquivo 10 vezes e algum processo ainda retinha o destino. Mate o processo bloqueador, exclua bin/obj do antivírus ou aumente CopyRetryCount.
- Fix: The type or namespace name 'X' could not be found (depois de adicionar uma referência de projeto)
CS0246 logo após um ProjectReference recém-adicionado quase sempre é um descompasso de TargetFramework, uma pasta obj/ desatualizada ou uma diretiva using ausente. Cinco correções em ordem de probabilidade.
- Correção: Cannot consume scoped service 'X' from singleton 'Y'
A validação de escopo do ASP.NET Core lança esta exceção quando um singleton capturaria uma dependência scoped pelo resto do processo. Torne o consumidor scoped, ou injete IServiceScopeFactory e crie um escopo sob demanda.
- Fix: PlatformNotSupportedException: Operation is not supported on this platform em Native AOT
Native AOT remove o JIT e o interpretador, então reflection emit, compilação de árvores de expressão e MakeGenericType desconhecidos lançam em runtime. Encontre a chamada via IL3050 e troque por um gerador de código-fonte ou um caminho pré-pronto.
- Correção: Unable to resolve service for type 'X' while attempting to activate 'Y'
O ASP.NET Core lança esta exceção quando um construtor pede um tipo que nunca foi registrado, foi registrado no contêiner errado ou foi adicionado depois que o host foi construído. Três correções concretas cobrem quase todos os casos.
- Correção: TaskCanceledException: A task was canceled no HttpClient
O HttpClient lança TaskCanceledException por três motivos diferentes: timeout, cancelamento pelo chamador ou um aborto em nível de conexão. Diferencie-os com InnerException e CancellationToken.IsCancellationRequested e corrija o motivo certo.
- A atualização de Copilot Studio para .NET 10 WebAssembly: 20% no caminho frio, 5% no quente
A Microsoft moveu o motor WASM do Copilot Studio do .NET 8 para o .NET 10. O pacote dual JIT/AOT, o fingerprinting e o WasmStripILAfterAOT explicam os números.
- Fix: The JSON value could not be converted to System.DateTime
System.Text.Json só aceita strings ISO 8601 para DateTime. Envie 2026-05-08T14:00:00Z ou registre um JsonConverter que parseie seu formato. Strings vazias e timestamps Unix também lançam.
- Os workflows do Microsoft Agent Framework agora sobrevivem a reinícios de processo via o stack Durable Task
Embrulhe um Workflow do Agent Framework em Microsoft.Agents.AI.DurableTask e cada passo de executor recebe checkpoint. Crash, redeploy, restart: a execução continua de onde parou.
- Correção: The instance of entity type cannot be tracked because another instance with the same key value is already being tracked
EF Core 11 lança essa exceção quando dois objetos compartilham a chave primária dentro de um DbContext. Desanexe o antigo ou atualize-o no lugar. AsNoTracking na leitura evita a colisão.
- Correção: A second operation was started on this context instance before a previous operation completed
EF Core lança esta exceção quando dois await rodam em paralelo sobre o mesmo DbContext. Aguarde cada chamada de forma sequencial, ou obtenha um DbContext novo por unidade de trabalho concorrente via IDbContextFactory.
- Migrando uma ListView de alto desempenho do Xamarin.Forms para CollectionView do MAUI
Migração passo a passo da ListView do Xamarin.Forms 5.0 para a CollectionView do .NET MAUI 11 para apps que já espremiam desempenho da ListView. Cobre reciclagem de células, virtualização, agrupamento, pull-to-refresh, ações de contexto, seleção, ItemsLayout, EmptyView e as armadilhas que pegam apps reais.
- Microsoft Agent Framework controla chamadas de ferramentas arriscadas com FunctionApprovalRequestContent
Envolva um AIFunction em ApprovalRequiredAIFunction e o agente para no meio da execução para pedir permissão. Veja como funciona o fluxo de requisição e resposta em C#.
- Correção: System.InvalidOperationException: No connection string named 'DefaultConnection' could be found
Se GetConnectionString retorna null no .NET 11, o seu appsettings.json não tem a chave, não está sendo copiado para a saída do build, ou o arquivo de ambiente errado está sendo selecionado. Três checagens resolvem 95% dos casos.
- Como converter T[] para ReadOnlyMemory<T> em C# (operador implícito e construtor explícito)
Três formas de envolver um T[] em um ReadOnlyMemory<T> no .NET 11: a conversão implícita, o construtor explícito e AsMemory(). Quando cada uma é a escolha certa.
- Agent Governance Toolkit coloca uma política YAML na frente de cada chamada de ferramenta MCP a partir do .NET
O novo pacote Microsoft.AgentGovernance da Microsoft envolve as chamadas de ferramentas MCP com um kernel de políticas, um scanner de segurança e um sanitizador de respostas. Veja o que cada peça faz e como a conexão fica em C#.
- Como configurar logging estruturado com Serilog e Seq no .NET 11
Um guia completo para conectar Serilog 4.x e Seq 2025.2 em uma aplicação ASP.NET Core do .NET 11: AddSerilog vs UseSerilog, bootstrap logging em duas etapas, configuração JSON, enrichers, request logging, correlação de traces com OpenTelemetry, API keys e os problemas de produção envolvendo buffering, retenção e nível de sinal.
- Como usar OpenTelemetry com .NET 11 e um backend gratuito
Conecte traces, métricas e logs do OpenTelemetry em uma aplicação ASP.NET Core .NET 11 com o exportador OTLP, e envie os dados para um backend gratuito e auto-hospedado: o Aspire Dashboard standalone para desenvolvimento local, Jaeger e SigNoz para produção auto-hospedada, e o OpenTelemetry Collector quando você precisar dos dois.
- Como escrever testes de integração contra um SQL Server real com Testcontainers
Um guia completo para rodar testes de integração de ASP.NET Core contra um SQL Server 2022 real usando Testcontainers 4.11 e EF Core 11: configuração de WebApplicationFactory, IAsyncLifetime, troca do registro do DbContext, aplicação de migrations, paralelismo, limpeza com Ryuk e armadilhas de CI.
2026 / 04
- Claude Code 2.1.122 permite escolher um nível de serviço do Bedrock a partir de uma variável de ambiente
Claude Code v2.1.122 adiciona a variável de ambiente ANTHROPIC_BEDROCK_SERVICE_TIER, enviada como o cabeçalho X-Amzn-Bedrock-Service-Tier. Defina como flex para 50 por cento de desconto nas chamadas do agente ou priority para respostas mais rápidas, sem tocar no código do SDK.
- Como adicionar rate limiting por endpoint no ASP.NET Core 11
Um guia completo de rate limiting por endpoint no ASP.NET Core 11: quando escolher fixed window vs sliding window vs token bucket vs concurrency, como RequireRateLimiting e [EnableRateLimiting] diferem, particionamento por usuário ou IP, o callback OnRejected, e a armadilha de implantação distribuída em que todo mundo cai.
- Como usar o novo tipo System.Threading.Lock no .NET 11
System.Threading.Lock chegou no .NET 9 e é a primitiva de sincronização padrão no .NET 11 e C# 14. Este guia mostra como migrar de lock(object), como o EnterScope funciona e os problemas em torno de await, dynamic e targets antigos.
- Como escrever um gerador de código-fonte para INotifyPropertyChanged
Um guia completo para construir seu próprio gerador de código-fonte incremental para INotifyPropertyChanged em C# 14 e .NET 11: a pipeline IIncrementalGenerator, atributos marcadores, saída de partial class, o padrão SetProperty e como manter compatibilidade com AOT.
- Como detectar quando um arquivo termina de ser escrito no .NET
FileSystemWatcher dispara Changed antes do escritor terminar. Tres padroes confiaveis para .NET 11 para saber quando um arquivo esta totalmente escrito: abrir com FileShare.None, fazer debounce com estabilizacao de tamanho e o truque de renomeacao do lado do produtor que evita o problema completamente.
- Como usar SearchValues<T> corretamente no .NET 11
SearchValues<T> supera IndexOfAny em 5x a 250x, mas só quando você o usa do jeito que o runtime espera. A regra de cachear como static, a pegadinha do StringComparison, quando não vale a pena e o truque de inversão com IndexOfAnyExcept que ninguém documenta.
- SkiaSharp 4.0 Preview 1: SKPath imutável, fontes variáveis e um novo co-mantenedor
SkiaSharp 4.0 Preview 1 chega com a Uno Platform como co-mantenedora ao lado do time do .NET. SKPath se torna imutável por trás de um novo SKPathBuilder, e o HarfBuzzSharp ganha controle completo de eixos de fontes variáveis OpenType.
- Como fazer upload de um arquivo grande com streaming para o Azure Blob Storage
Faça upload de arquivos de vários GB para o Azure Blob Storage a partir do .NET 11 sem carregá-los na memória. BlockBlobClient.UploadAsync com StorageTransferOptions, MultipartReader para uploads em ASP.NET Core, e as armadilhas de buffering que jogam seu payload na LOH.
- Como usar Native AOT com APIs mínimas do ASP.NET Core
Um passo a passo completo para .NET 11 que envia uma API mínima do ASP.NET Core com Native AOT: PublishAot, CreateSlimBuilder, JSON com gerador de código-fonte, a limitação do AddControllers, avisos IL2026 / IL3050 e EnableRequestDelegateGenerator para projetos de biblioteca.
- Como adicionar um filtro global de exceções no ASP.NET Core 11
Guia completo de tratamento global de exceções no ASP.NET Core 11: por que IExceptionFilter é a ferramenta errada, como IExceptionHandler e UseExceptionHandler funcionam juntos, respostas com ProblemDetails, cadeias de múltiplos handlers e a mudança de comportamento do .NET 10 sobre supressão de diagnósticos.
- Como construir um servidor MCP customizado em C# no .NET 11
Construa um servidor Model Context Protocol funcional em C# 14 / .NET 11 usando o SDK oficial ModelContextProtocol 1.2. Cobre transporte stdio, atributos [McpServerTool], injeção de dependência, a armadilha do logging em stderr e o registro com Claude Code, Claude Desktop e VS Code.
- Como fazer testes unitários de código que usa HttpClient
Um guia completo para testar HttpClient no .NET 11: por que você não deve mockar HttpClient diretamente, como escrever um HttpMessageHandler de stub, trocar o handler primário com IHttpClientFactory, verificar retentativas do Polly e a opção WireMock.Net.
- Aspire 13.2.4 corrige CVE-2026-40894: DoS via header baggage no OpenTelemetry .NET
Aspire 13.2.4 traz uma atualização do OpenTelemetry para CVE-2026-40894, uma amplificação de alocações em Gen0 nos parsers dos propagadores baggage, B3 e Jaeger. Atualize OpenTelemetry.Api e OpenTelemetry.Extensions.Propagators para 1.15.3 mesmo que você não use Aspire.
- Como fazer profiling de uma app .NET com dotnet-trace e ler a saída
Guia completo para fazer profiling de apps .NET 11 com dotnet-trace: instalar, escolher o perfil certo, capturar desde o startup e ler o .nettrace no PerfView, Visual Studio, Speedscope ou Perfetto.
- Como usar Channels em vez de BlockingCollection em C#
System.Threading.Channels é o substituto assíncrono de BlockingCollection no .NET 11. Este guia mostra como migrar, como escolher entre limitado e ilimitado, e como lidar com backpressure, cancelamento e desligamento controlado sem deadlocks.
- Como escrever um JsonConverter customizado em System.Text.Json
Um guia completo para escrever JsonConverter<T> customizado para System.Text.Json no .NET 11: quando você realmente precisa de um, como navegar pelo Utf8JsonReader corretamente, como lidar com tipos genéricos usando JsonConverterFactory e como manter compatibilidade com AOT.
- .NET 10 no Ubuntu 26.04: tags de contêiner resolute e Native AOT no archive
Ubuntu 26.04 Resolute Raccoon traz .NET 10 no archive, introduz os tags de contêiner -resolute para substituir -noble, e empacota o ferramental de Native AOT via dotnet-sdk-aot-10.0.
- Como Gerar Código de Cliente Fortemente Tipado a partir de uma Especificação OpenAPI no .NET 11
Use o Kiota, o gerador oficial de OpenAPI da Microsoft, para produzir um cliente C# fluent e fortemente tipado a partir de qualquer especificação OpenAPI. Passo a passo: instalar, gerar, conectar à injeção de dependência do ASP.NET Core e gerenciar autenticação.
- Como transmitir um arquivo de um endpoint ASP.NET Core sem buffering
Sirva arquivos grandes do ASP.NET Core 11 sem carrega-los na memoria. Tres niveis: PhysicalFileResult para arquivos em disco, Results.Stream para streams arbitrarios e Response.BodyWriter para conteudo gerado -- com codigo para cada caso.
- Como cancelar uma Task de longa duração em C# sem causar deadlock
Cancelamento cooperativo com CancellationToken, CancelAsync, Task.WaitAsync e tokens ligados no .NET 11. Mais os padrões de bloqueio que transformam um cancelamento limpo em deadlock.
- Como usar IAsyncEnumerable<T> com EF Core 11
As queries do EF Core 11 implementam IAsyncEnumerable<T> diretamente. Veja como fazer streaming de linhas com await foreach, quando preferir a ToListAsync, e as pegadinhas envolvendo conexões, tracking e cancelamento.
- .NET 10.0.7 sai out-of-band para consertar CVE-2026-40372 no ASP.NET Core Data Protection
Uma falha de validação HMAC no Microsoft.AspNetCore.DataProtection 10.0.0 até 10.0.6 permite que atacantes forjem ciphertexts. .NET 10.0.7 é o fix obrigatório.
- O Debugger Agent do Visual Studio 18.5 transforma o Copilot num parceiro vivo de caça a bugs
Visual Studio 18.5 GA traz um workflow guiado de Debugger Agent no Copilot Chat que forma uma hipótese, coloca breakpoints, acompanha um repro, valida contra estado em runtime e propõe um fix.
- Agent Skills chegam ao Visual Studio 2026 18.5: Copilot descobre SKILL.md automaticamente do seu repo
Visual Studio 2026 18.5.0 deixa o GitHub Copilot carregar Agent Skills de .github/skills, .claude/skills e ~/.copilot/skills. Packs reutilizáveis de instruções SKILL.md viajam com seu repo.
- RyuJIT poda mais bounds checks no .NET 11 Preview 3: index-from-end e i + constante
.NET 11 Preview 3 ensina ao RyuJIT a eliminar bounds checks redundantes em acessos consecutivos index-from-end e em padrões i + constante < length, cortando pressão de branches em loops apertados.
- RegexOptions.AnyNewLine chega no .NET 11 Preview 3: anchors Unicode-aware sem os hacks de \r?
.NET 11 Preview 3 adiciona RegexOptions.AnyNewLine para que ^, $, \Z, e . reconheçam toda sequência de newline Unicode, incluindo \r\n, NEL, LS, e PS, com \r\n tratado como um break atômico.
- Aspire 13.2 --isolated: rode instâncias paralelas do AppHost sem colisões de porta
Aspire 13.2 traz um flag --isolated que dá a cada aspire run suas próprias portas aleatórias e store de secrets. Desbloqueia trabalho multi-checkout, worktrees de agent, e testes de integração que precisam de um AppHost vivo.
- .NET 11 Preview 3: dotnet run -e seta variáveis de ambiente sem launch profiles
dotnet run -e no .NET 11 Preview 3 passa variáveis de ambiente direto da CLI e as expõe como items RuntimeEnvironmentVariable do MSBuild.
- dotnet watch no .NET 11 Preview 3: hosts Aspire, crash recovery, e Ctrl+C mais são
dotnet watch ganha integração com Aspire app host, relançamento automático depois de crashes, e tratamento de Ctrl+C consertado para apps desktop Windows no .NET 11 Preview 3.
- Construindo um motor de banco de dados de latência de microssegundos em C#
O projeto Typhon de Loic Baumann mira commits ACID de 1-2 microssegundos usando ref structs, intrínsecos de hardware e memória fixada, provando que C# pode competir no nível de programação de sistemas.
- Como os parâmetros nvarchar padrão do Dapper matam silenciosamente seus índices SQL Server
Strings de C# enviadas via Dapper viram nvarchar(4000) por padrão, forçando o SQL Server a conversões implícitas e scans completos de índice. Aqui como consertar com DbType.AnsiString.
- GitHub Copilot Modernization: o relatório de assessment é o produto real
GitHub Copilot Modernization é vendido como um loop Assess, Plan, Execute pra migrar apps .NET legacy. A fase de assessment é onde o valor mora: um relatório de inventário, blockers categorizados, e orientação de remediação no nível de arquivo que você pode diffar como código.
- Hot Reload auto-restart no Visual Studio 2026: rude edits param de matar sua sessão de debug
Visual Studio 2026 adiciona HotReloadAutoRestart, um opt-in no nível de projeto que reinicia a app quando um rude edit de outra forma terminaria a sessão de debug. Especialmente útil pra projetos Razor e Aspire.
- EF Core 11 permite criar e aplicar uma migração em um único comando
O comando dotnet ef database update agora aceita --add para criar e aplicar uma migração em um único passo. Veja como funciona, por que importa para containers e .NET Aspire, e o que observar.
- EF Core 11 adiciona busca vetorial nativa do SQL Server com índices DiskANN
EF Core 11 Preview 2 suporta o VECTOR_SEARCH() do SQL Server 2025 e os índices vetoriais DiskANN diretamente do LINQ. Veja como configurar o índice, executar consultas aproximadas, e o que muda da abordagem VectorDistance do EF Core 10.
- Rider 2026.1 inclui um visualizador de ASM para a saída de JIT, ReadyToRun e NativeAOT
Rider 2026.1 adiciona um plugin .NET Disassembler que permite inspecionar o código de máquina gerado pelos compiladores JIT, ReadyToRun e NativeAOT sem sair da IDE.
- Os tipos union do C# 15 chegaram: type unions são entregues no .NET 11 Preview 2
C# 15 introduz a palavra-chave union para type unions com correspondência de padrões exaustiva e conversões implícitas. Disponível agora no .NET 11 Preview 2.
- Kestrel abandona exceções do seu parser HTTP/1.1 no .NET 11
O parser de requisições HTTP/1.1 do Kestrel no .NET 11 substitui BadHttpRequestException por um struct de resultado, cortando o overhead de requisições malformadas em até 40%.
- Microsoft Agent Framework 1.0: construindo agentes de IA em C# puro
Microsoft Agent Framework chega ao 1.0 com APIs estáveis, conectores multi-provedor, orquestração multi-agente, e interoperabilidade A2A/MCP. Veja como fica na prática no .NET 10.
2026 / 03
- Como 878 PRs do Copilot Coding Agent em dotnet/runtime realmente parecem
A equipe .NET compartilha dez meses de dados reais sobre rodar o Copilot Coding Agent do GitHub no dotnet/runtime: 878 PRs, uma taxa de merge de 67,9%, e lições claras sobre onde o desenvolvimento assistido por IA ajuda e onde ainda fica aquém.
- Generative AI for Beginners .NET v2: reconstruído para .NET 10 com Microsoft.Extensions.AI
O curso gratuito de IA generativa para desenvolvedores .NET da Microsoft entrega a Versão 2, reconstruída para .NET 10 e migrada do Semantic Kernel para o padrão IChatClient do Microsoft.Extensions.AI.
2026 / 02
- Ideia para C# 14: interceptors poderiam fazer a geração de código-fonte do System.Text.Json parecer automática
Uma discussão da comunidade propôs usar interceptors do C# 14 para reescrever chamadas ao JsonSerializer de modo que utilizem automaticamente um JsonSerializerContext gerado, mantendo a geração de código-fonte amigável a AOT com pontos de chamada mais limpos.
- Polars.NET: um motor de DataFrame em Rust para .NET 10 que se apoia em LibraryImport
Um novo projeto Polars.NET está em alta depois de um post da comunidade em 6 de fevereiro de 2026. A manchete é simples: uma API DataFrame amigável ao .NET apoiada pelo Polars em Rust, com um ABI C estável e interop baseada em LibraryImport para manter o overhead baixo.
- .NET Framework 3.5 vira independente nas novas builds do Windows: o que quebra
A partir do Windows 11 Build 27965, o .NET Framework 3.5 deixa de ser um componente opcional do Windows. Veja o que quebra em CI, provisionamento e golden images, e como corrigir.
- TrailBase v0.23.7: uma alternativa ao Firebase em binário único para .NET 10 e Flutter
TrailBase é um backend open-source de executável único, construído sobre Rust, SQLite e Wasmtime. A versão 0.23.7 traz correções de UI e melhor tratamento de erros.
2026 / 01
- Spam de pedidos “become owner” no NuGet: o que fazer (e o que travar) no .NET 9/.NET 10
Defenda seus pacotes .NET contra o spam de pedidos de propriedade no NuGet. Lock files, Package Source Mapping e práticas de Central Package Management para .NET 9 e .NET 10.
- Scalar no ASP.NET Core: por que seu token Bearer é ignorado (.NET 10)
Se seu token Bearer funciona no Postman mas não no Scalar, o problema provavelmente é seu documento OpenAPI. Veja como declarar um esquema de segurança apropriado no .NET 10.
- TreatWarningsAsErrors sem sabotar os builds de dev (.NET 10)
Como aplicar TreatWarningsAsErrors em builds Release e em CI mantendo Debug flexível para o desenvolvimento local no .NET 10, usando Directory.Build.props.
- Perfetto + dotnet-trace: um ciclo prático de profiling para .NET 9/.NET 10
Um ciclo prático de profiling para .NET 9 e .NET 10: capture traces com dotnet-trace, visualize-os no Perfetto e itere sobre problemas de CPU, GC e thread pool.
- Um app de notas "apenas local" em WinUI 3 é o tipo certo de entediante: offline-first, SQLite, teclado em primeiro lugar
Miyanyedi Quick Note é um app de notas em WinUI 3 + SQLite, offline-first e amigável à privacidade. Eis por que apenas local é um recurso, além de um snippet mínimo de SQLite para apps desktop em .NET 8.
- Um gerenciador SSH WPF open-source mostra um padrão prático: xterm.js no WebView2, segredos via DPAPI
SshManager é um gerenciador SSH WPF open-source construído em .NET 8. Mostra um padrão prático: xterm.js dentro do WebView2 para renderização de terminal, EF Core + SQLite para persistência e DPAPI para proteção de credenciais locais.
- CV Shortlist: um SaaS .NET 10 com IA virou open-source, e a stack vale a pena estudar
CV Shortlist é um SaaS .NET 10 open-source que combina Azure Document Intelligence com um modelo da OpenAI. A stack, a disciplina de configuração e a fronteira de integração com IA valem o estudo.
- ModularPipelines V3: escreva pipelines de CI em C#, depure localmente e pare de babá de YAML
ModularPipelines V3 permite escrever pipelines de CI em C# em vez de YAML. Execute-os localmente com dotnet run, obtenha segurança em tempo de compilação e depure com breakpoints.
- Implante uma app .NET com Podman + systemd: reinícios estáveis, logs reais, sem mágica
Implante serviços .NET 9 e .NET 10 em uma VM Linux usando Podman e systemd. Tenha reinícios estáveis, logs reais via journald e uma app em contêiner gerenciada como um serviço de verdade -- sem Kubernetes.
- gRPC em contêineres parece difícil no .NET 9 e .NET 10: 4 armadilhas que você pode corrigir
Quatro armadilhas comuns ao hospedar gRPC em contêineres com .NET 9 e .NET 10: incompatibilidade de protocolo HTTP/2, confusão sobre terminação de TLS, health checks quebrados e proxy mal configurado -- com a correção para cada uma.
- Microsoft `mcp`: ligando servidores Model Context Protocol a partir de C# no .NET 10
Como ligar servidores Model Context Protocol (MCP) em C# no .NET 10 usando microsoft/mcp. Cobre contratos de ferramentas, validação de entrada, autenticação, observabilidade e padrões prontos para produção.
- Monitorar jobs em segundo plano no .NET 9 e .NET 10 sem Hangfire: saúde + métricas + alertas
Monitore jobs BackgroundService no .NET 9 e .NET 10 sem Hangfire usando health checks de heartbeat, métricas de duração e alertas de falha, com um exemplo de código prático.
- Os apps baseados em arquivo do .NET 10 ganharam scripts com múltiplos arquivos: `#:include` está chegando
.NET 10 adiciona suporte a #:include em apps baseados em arquivo, permitindo que scripts executados com dotnet run abranjam vários arquivos .cs sem criar um projeto completo.
- SBOM para .NET no Docker: pare de tentar forçar uma única ferramenta a ver tudo
Como rastrear dependências NuGet e pacotes do SO do contêiner de uma imagem Docker de .NET usando CycloneDX, Syft e Dependency-Track -- e por que um único SBOM não basta.
- System.CommandLine v2, mas com a fiação já pronta: `Albatross.CommandLine` v8
Albatross.CommandLine v8 se apoia em System.CommandLine v2 com um gerador de código-fonte, integração de DI e uma camada de hosting para eliminar o código repetitivo de CLI em aplicações .NET 9 e .NET 10.
- Wave-IDE em 2026: o encanamento mínimo de Roslyn por trás de uma IDE WinForms no .NET 10
Wave-IDE mostra que WinForms e Roslyn no .NET 10 já bastam para construir uma IDE C# funcional. Aqui está o encanamento mínimo para análise incremental, autocompletar e diagnósticos.
- AWS Lambda suporta .NET 10: o que verificar antes de virar o runtime
AWS Lambda agora suporta .NET 10, mas a atualização do runtime não é a parte difícil. Aqui está um checklist prático cobrindo cold starts, trimming, native AOT e formato de deploy.
- O .NET 10 explodiu sua lista de NICs? Filtrando GetAllNetworkInterfaces() sem se enganar
Como filtrar GetAllNetworkInterfaces() no .NET 10 quando adaptadores virtuais de Hyper-V, Docker, WSL e VPNs lotam a lista. Inclui um filtro em duas etapas com trade-offs explícitos.
- Queryable Encryption + busca vetorial no provider MongoDB EF Core (e por que isso importa para .NET 9 e .NET 10)
O provider MongoDB EF Core agora suporta Queryable Encryption e busca vetorial. Veja o que isso significa para apps .NET 9 e .NET 10 que já usam EF Core.
- SwitchMediator v3: um mediator com zero alocações que continua amigável a AOT
O SwitchMediator v3 mira em dispatch sem alocações e amigável a AOT para serviços CQRS em .NET 9 e .NET 10. Veja o que isso significa e como medir o seu próprio mediator.
- Desempenho no .NET 10: SearchValues
Use SearchValues no .NET 10 para busca multi-string de alto desempenho. Substitui loops foreach por correspondência acelerada por SIMD usando os algoritmos Aho-Corasick e Teddy.
- Streaming de tarefas com Task.WhenEach do .NET 9
O .NET 9 introduz Task.WhenEach, que retorna um IAsyncEnumerable de tarefas conforme elas completam. Aqui está como ele simplifica o processamento de resultados paralelos conforme chegam.
- C# 13: o fim das alocações de `params`
O C# 13 finalmente elimina a alocação oculta de array por trás de params. Agora você pode usar params com Span, ReadOnlySpan, List e outros tipos de coleção para métodos variádicos sem alocação.
- .NET 9: o fim do lock(object)
O .NET 9 introduz System.Threading.Lock, uma primitiva de sincronização leve e dedicada que substitui lock(object) com melhor desempenho e intenção mais clara.
- Otimizando contagem de frequência com LINQ CountBy
Substitua GroupBy por CountBy no .NET 9 para uma contagem de frequência mais limpa e eficiente. Reduz alocações de O(N) para O(K) ao pular estruturas intermediárias de agrupamento.
2025 / 04
- .NET 10: Alocação em pilha de arrays de tipos por valor
No .NET 10, o JIT consegue alocar em pilha arrays pequenos de tamanho fixo de tipos por valor, eliminando alocações no heap e entregando desempenho até 60% melhor em comparação com o .NET 9.
- Novidades no .NET MAUI 10
Um resumo dos novos recursos, melhorias e mudanças incompatíveis no .NET MAUI 10, lançado junto com o .NET 10 e o C# 14 em novembro de 2025.
- Como alterar a cor do ícone do SearchBar no .NET MAUI
Como alterar a cor do ícone do SearchBar no .NET MAUI usando a nova propriedade SearchIconColor introduzida no .NET 10.
- C# 14: Parâmetros simplificados com modificadores em lambdas
O C# 14 permite usar os modificadores ref, out, in, scoped e ref readonly em parâmetros de lambda com tipo implícito, eliminando a necessidade de declarar explicitamente os tipos dos parâmetros.
- Construtores e eventos parciais no C# 14
O C# 14 permite declarar construtores de instância e eventos como membros parciais, dividindo definições entre arquivos para uma geração de código mais limpa e melhor separação de responsabilidades.
- C# 14: suporte do nameof para tipos genéricos não vinculados
C# 14 aprimora a expressão nameof para suportar tipos genéricos não vinculados como List<> e Dictionary<,>, eliminando a necessidade de argumentos de tipo de preenchimento.
- Conversões implícitas de Span em C# 14: suporte de primeira classe para Span e ReadOnlySpan
C# 14 adiciona conversões implícitas integradas entre Span, ReadOnlySpan, arrays e strings, possibilitando APIs mais limpas, melhor inferência de tipos e menos chamadas manuais a AsSpan().
- .NET 10: melhorias de desempenho na enumeração de arrays (de-abstração de arrays no JIT)
No .NET 10, o compilador JIT reduz a sobrecarga de iterar arrays por meio de interfaces. Veja benchmarks comparando .NET 9 vs .NET 10 com foreach, IEnumerable e análise condicional de escape.
- C# 14: a palavra-chave field e propriedades respaldadas por field
C# 14 introduz a palavra-chave contextual field nos acessadores de propriedades, permitindo adicionar lógica personalizada às auto-properties sem declarar um campo de apoio separado.
2025 / 01
- Desempenho no .NET: ToList vs ToArray
O .NET 9 melhora significativamente o desempenho de ToArray usando InlineArray, tornando-o mais rápido e eficiente em memória do que ToList. Veja benchmarks comparando .NET 8 vs .NET 9.
- C# 13: Use coleções params com qualquer tipo de coleção reconhecido
C# 13 estende o modificador params para além de arrays e suporta Span, ReadOnlySpan, IEnumerable e outros tipos de coleção, reduzindo boilerplate e melhorando a flexibilidade.
- Como mudar para C# 13
Como corrigir 'Feature is not available in C# 12.0' e mudar seu projeto para C# 13 alterando o target framework ou definindo LangVersion no seu arquivo .csproj.
2024 / 12
- O que há de novo no C# 14.0
Um resumo de todos os novos recursos do C# 14.0, incluindo a palavra-chave field, membros de extensão, atribuição condicional a null, conversões implícitas de span e muito mais.
- O que há de novo no .NET 10
O que há de novo no .NET 10: versão LTS com 3 anos de suporte, novas otimizações do JIT, desvirtualização de arrays, melhorias na alocação na pilha e mais.
- Histórico de versões da linguagem C#
A evolução do C# o transformou em uma linguagem moderna e de alto desempenho. Este guia acompanha cada marco importante. Os primeiros anos (C# 1.0 - 1.2). O C# foi lançado em 2002 como linguagem primária para o .NET Framework. Parecia com Java, mas com foco no desenvolvimento Windows. A versão 1.2 chegou logo depois com pequenas...
2024 / 04
- .NET 8 ToFrozenDictionary: Dictionary vs FrozenDictionary
Converta um Dictionary em um FrozenDictionary com `ToFrozenDictionary()` no .NET 8 para leituras mais rápidas. Benchmark, quando usar e o trade-off em tempo de build.
2023 / 11
- Como adicionar o AdMob ao seu app MAUI
Aprenda a exibir anúncios em banner do AdMob no seu app .NET MAUI tanto no Android quanto no iOS, com configuração passo a passo e implementações de handlers específicas por plataforma.
- Começando com o .NET Aspire
Um guia passo a passo para construir sua primeira aplicação .NET Aspire, cobrindo a estrutura do projeto, descoberta de serviços e o dashboard do Aspire.
- Como instalar o .NET Aspire (dotnet workload install aspire)
Instale o .NET Aspire via `dotnet workload install aspire`. Configuração passo a passo do .NET 8, do workload do Aspire e do Docker no Windows, macOS e Linux.
- O que é o .NET Aspire?
Uma visão geral do .NET Aspire, o framework orientado para a nuvem para construir aplicações distribuídas escaláveis, abordando orquestração, componentes e ferramentas.
- C# Escolher itens aleatoriamente de uma lista
Em C#, você pode selecionar aleatoriamente itens de uma lista usando Random.GetItems, um método introduzido no .NET 8. Aprenda como funciona com exemplos práticos.
- Como publicar um container como tar.gz no .NET
Aprenda a publicar um container do .NET 8 como um arquivo tar.gz usando a propriedade ContainerArchiveOutputPath com dotnet publish.
- MAUI: Como registrar handlers em uma biblioteca
Aprenda a registrar view handlers e serviços de dentro de uma biblioteca .NET MAUI usando o padrão builder e os métodos de extensão do MauiAppBuilder.
- Como resolver: 'Point' não tem um tamanho predefinido, portanto sizeof só pode ser usado em um contexto unsafe
Resolva o erro de C# em que sizeof não pode ser usado com Point fora de um contexto unsafe. Duas soluções: habilitar código unsafe ou usar Marshal.SizeOf.
- C# Acessar o campo de apoio de uma propriedade privada usando Unsafe Accessor
Use UnsafeAccessorAttribute no .NET 8 para acessar os campos de apoio autogerados de propriedades automáticas privadas em C# sem reflexão.
- C# arquivos ZIP para Stream
.NET 8 inclui novas sobrecargas de CreateFromDirectory e ExtractToDirectory que permitem criar e extrair arquivos ZIP diretamente para e a partir de um Stream, sem gravar em disco.
- Desempenho do .NET 8: GetGenericTypeDefinition 10x mais rápido
Benchmarks de GetGenericTypeDefinition no .NET 8 contra o .NET 7 mostram desempenho quase 10x melhor. Veja o código do benchmark e os resultados com BenchmarkDotNet.
- Como tirar um screenshot no .NET core
Aprenda a capturar um screenshot de toda a área de trabalho a partir de uma aplicação de console .NET usando System.Windows.Forms. Solução só para Windows que cobre todos os monitores.
- C# como atualizar um campo readonly usando UnsafeAccessor
Aprenda a atualizar um campo readonly em C# usando UnsafeAccessor, uma alternativa à reflexão sem a penalidade de desempenho. Disponível no .NET 8.
- Desempenho do .NET 8: UnsafeAccessor vs. Reflection
Benchmark de UnsafeAccessor contra Reflection no .NET 8. Veja como UnsafeAccessor entrega desempenho sem overhead em comparação com a reflexão tradicional.
2023 / 10
- C# UnsafeAccessor: membros privados sem reflexão (.NET 8)
Use o atributo `[UnsafeAccessor]` no .NET 8 para ler campos privados e chamar métodos privados sem overhead, sem reflexão e totalmente compatível com AOT.
- C# como marcar recursos como experimentais
A partir do C# 12, um novo ExperimentalAttribute permite marcar tipos, métodos, propriedades ou assemblies como experimentais. Aprenda a usá-lo com diagnosticId, tags pragma e UrlFormat.
- C# parâmetros ref readonly
O modificador ref readonly no C# oferece uma forma mais transparente de passar referências somente leitura. Veja como ele melhora o modificador in, com restrições mais claras e visibilidade para quem chama.
- C# como embaralhar um array?
A forma mais fácil de embaralhar um array em C# é usar Random.Shuffle, introduzido no .NET 8. Funciona in-place tanto em arrays quanto em spans.
- System.Text.Json como modificar um type info resolver existente
Use o novo método de extensão WithAddedModifier no .NET 8 para modificar facilmente qualquer contrato de serialização IJsonTypeInfoResolver sem criar um resolver novo do zero.
- HttpClient obter JSON como AsyncEnumerable
O novo método de extensão GetFromJsonAsAsyncEnumerable no .NET 8 desserializa o JSON da resposta HTTP em um IAsyncEnumerable. Aprenda a usá-lo com await foreach.
- JsonNode atualizações de API no .NET 8
Confira as novas APIs adicionadas ao JsonNode e ao JsonArray no .NET 8, incluindo GetValueKind, GetPropertyName, GetElementIndex, ReplaceWith e ParseAsync.
- Deep clone e deep equality de um JsonNode
Veja como usar os novos métodos DeepClone() e DeepEquals() do JsonNode no .NET 8 para clonar e comparar nós JSON em profundidade.
- System.Text.Json desabilitando a serialização baseada em reflexão
Veja como desabilitar a serialização baseada em reflexão do System.Text.Json a partir do .NET 8 para aplicações trimmed e native AOT, usando a propriedade JsonSerializerIsReflectionEnabledByDefault.
- Adicionar/remover TypeInfoResolver em um JsonSerializerOptions existente
Aprenda a adicionar ou remover instâncias de TypeInfoResolver em um JsonSerializerOptions existente usando a nova propriedade TypeInfoResolverChain do .NET 8.
- WPF Evitar que a seleção do file dialog vá para os recentes
Evite que as seleções do file dialog em WPF apareçam nos recentes do Windows Explorer e no Menu Iniciar definindo AddToRecent como false no .NET 8.
- WPF estados individuais de dialog com ClientGuid
Use a propriedade ClientGuid no .NET 8 para persistir estados individuais por dialog, como tamanho da janela, posição e última pasta usada, entre os file dialogs do WPF.
- C# 12 Interceptors
Conheça os interceptors do C# 12, um recurso experimental do compilador no .NET 8 que permite substituir chamadas de método em tempo de compilação usando o atributo InterceptsLocation.
- WPF Limitar a árvore de pastas do OpenFileDialog a uma pasta específica
Aprenda a limitar a árvore de pastas do OpenFileDialog do WPF a uma pasta raiz específica usando a propriedade RootDirectory no .NET 8.
- Aceleração por hardware do WPF em RDP
Aprenda a habilitar a aceleração por hardware do WPF sobre RDP no .NET 8 para melhorar o desempenho e ter uma experiência de área de trabalho remota mais responsiva.
- WPF Open / Select Folder Dialog (OpenFolderDialog do .NET 8)
Use o novo `OpenFolderDialog` do .NET 8 no WPF para deixar os usuários abrirem e selecionarem uma ou várias pastas. Substitui o antigo workaround com FolderBrowserDialog do WinForms.
2023 / 09
- Implementation type Data.AppDbContext can't be converted to service type Microsoft.AspNetCore.Identity.IUserStore
Corrija o erro do ASP.NET Core Identity em que AppDbContext não pode ser convertido em IUserStore adicionando AddEntityFrameworkStores na sua configuração de identidade.
- .NET 8 serializando propriedades de hierarquias de interfaces
O .NET 8 passa a suportar a serialização de propriedades de hierarquias de interfaces, incluindo todas as propriedades de todas as interfaces conforme o tipo declarado da variável.
- .NET 8 desserializar em propriedades não públicas
Aprenda a desserializar JSON em propriedades não públicas no .NET 8 usando o atributo JsonInclude e construtores parametrizados.
- .NET 8 como usar JsonStringEnumConverter com native AOT
Aprenda a usar o novo JsonStringEnumConverter<TEnum> no .NET 8 para serializar enums no System.Text.Json de forma compatível com native AOT.
- The type or namespace name InterceptsLocationAttribute could not be found
Como corrigir o erro CS0246 do InterceptsLocationAttribute nos interceptors do C# definindo o atributo você mesmo.
- .NET 8 marcando JsonSerializerOptions como readonly
Aprenda a marcar instâncias de JsonSerializerOptions como somente leitura no .NET 8 usando MakeReadOnly e a verificar a propriedade IsReadOnly.
- .NET 8 serialização de Half, Int128 e UInt128
O System.Text.Json no .NET 8 adiciona suporte nativo de serialização para os tipos numéricos Half, Int128 e UInt128.
- .NET 8 Memory<byte> é serializado como base64
A partir do .NET 8, tanto Memory<byte> quanto ReadOnlyMemory<byte> são serializados como strings Base64, enquanto outros tipos como Memory<int> continuam como arrays JSON.
- .NET 8 incluindo membros não públicos na serialização JSON
Aprenda a incluir propriedades private, protected e internal na serialização JSON no .NET 8 usando o atributo JsonInclude.
- dotnet workload clean
Use o comando `dotnet workload clean` para remover packs de workload do .NET que ficaram para trás após uma atualização do SDK ou do Visual Studio: quando usar, o que remove e pontos de atenção.
- .NET 8 desserializando em propriedades somente leitura
Aprenda a desserializar JSON em propriedades somente leitura, sem setter, no .NET 8 usando JsonObjectCreationHandling ou JsonSerializerOptions.
- .NET 8 lidando com membros não mapeados na desserialização JSON
Aprenda a lançar exceções para propriedades JSON não mapeadas durante a desserialização no .NET 8 usando JsonUnmappedMemberHandling.
2023 / 08
- Como instalar o dotnet script
dotnet script permite executar scripts C# (.CSX) a partir da CLI do .NET. O único requisito é ter o .NET 6 ou mais recente instalado na sua máquina. Você pode usar o comando abaixo para instalar o dotnet-script globalmente: Depois, para executar um arquivo de script, basta rodar dotnet script <file_path>, como no exemplo abaixo: Como...
- C# como esperar um processo terminar?
Você pode usar o método WaitForExit para esperar o processo finalizar. Seu código espera de forma síncrona até o processo terminar e então retoma a execução. Veja um exemplo: O código acima inicia um novo processo cmd.exe e executa o comando timeout 5. A chamada process.WaitForExit() força o programa...
- .NET 8 JsonNamingPolicy: SnakeCaseLower e KebabCaseLower (System.Text.Json)
Use o novo `JsonNamingPolicy.SnakeCaseLower` (e SnakeCaseUpper, KebabCaseLower, KebabCaseUpper) do .NET 8 para serializar JSON em snake_case / kebab-case via System.Text.Json, sem precisar de converter customizado.
2023 / 06
- dotnet new api -aot: '-aot' is not a valid option
Resolva o erro '-aot is not a valid option' usando a sintaxe correta com hífen duplo: dotnet new api --aot.
- Como começar a programar com C#
Um guia para iniciantes sobre como começar a programar em C#, desde a configuração do Visual Studio até escrever seu primeiro programa e encontrar recursos de aprendizado.
- O que há de novo no .NET 8
.NET 8 foi lançado em 14 de novembro de 2023 como uma versão LTS (Long Term Support), o que significa que continuará recebendo suporte, atualizações e correções de bugs por pelo menos três anos a partir do lançamento. Como de costume, .NET 8 traz suporte a uma nova versão da linguagem C#, no caso C# 12.