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.
dotnet watch sempre foi o cavalo de trabalho silencioso do inner loop do .NET. Recarrega sua app quando arquivos mudam, aplica hot reload onde consegue, e fica fora do caminho quando não consegue. .NET 11 Preview 3 (lançado em 14 de abril de 2026) empurra a ferramenta pra frente em três pontos de dor específicos: rodar apps distribuídas, sobreviver a crashes, e lidar com Ctrl+C em targets desktop Windows.
App hosts Aspire agora vigiam limpos
Até o Preview 3, rodar um Aspire app host sob dotnet watch era esquisito. Aspire orquestra múltiplos projetos filhos, e o watcher não entendia esse modelo, então mudanças de arquivo ou rebuildavam só o host ou forçavam a topologia inteira a reiniciar do zero.
Preview 3 fia o dotnet watch no app model do Aspire diretamente:
cd src/MyApp.AppHost
dotnet watch
Edite um arquivo em MyApp.ApiService e o watcher agora aplica a mudança só naquele serviço, mantendo o resto da topologia Aspire viva. O dashboard fica em pé, os contêineres dependentes continuam rodando, e você perde segundos de boot time a cada mudança em vez de segundos por projeto.
Pra soluções microservice-heavy essa é a diferença entre dotnet watch ser um nice-to-have e ser a forma padrão de trabalhar.
Relançamento automático depois de um crash
A segunda manchete é crash recovery. Antes, quando sua app vigiada lançava uma exceção não tratada e morria, dotnet watch parava na mensagem de crash e esperava restart manual. Se sua próxima tecla salvasse um fix, nada acontecia até você bater Ctrl+R.
No Preview 3 esse comportamento inverte. Pegue um endpoint que explode:
app.MapGet("/", () =>
{
throw new InvalidOperationException("boom");
});
Deixe a app crashar uma vez, salve um fix, e dotnet watch relança automaticamente na próxima mudança relevante de arquivo. Você não perde o feedback loop só porque a app decidiu sair non-zero. O mesmo comportamento cobre crashes no startup, que costumavam deixar o watcher preso antes que hot reload pudesse sequer se anexar.
Isso compõe bem com o tratamento “rude edit” watch-wide que já existe: hot reload tenta primeiro, cai pra um restart em edits não suportados, e agora cai pra um restart depois de um crash também. Três caminhos, um resultado consistente: a app volta.
Ctrl+C em apps desktop Windows
O terceiro fix é pequeno mas era crônico: Ctrl+C no dotnet watch pra apps WPF e Windows Forms. Antes podia deixar o processo desktop órfão, desconectado do watcher, ou preso dentro de uma janela modal. Preview 3 re-encana o tratamento de sinais pra que Ctrl+C derrube tanto o watcher quanto o processo desktop em ordem, sem entradas zumbi de dotnet.exe empilhando no Task Manager.
Se você roda um shell WPF sob dotnet watch:
dotnet watch run --project src/DesktopShell
Bata Ctrl+C uma vez e tanto o shell quanto o watcher saem limpos. Soa básico, e é, mas o comportamento anterior era a razão principal de muitos times evitarem dotnet watch em projetos desktop por completo.
Por que esses três juntos importam
Cada mudança sozinha é modesta. Combinadas, movem dotnet watch de um helper por projeto pra um arnês de sessão inteira que pode hospedar uma topologia Aspire o dia todo, absorver o crash ocasional, e se limpar quando você termina. O inner loop ficou consideravelmente menos frágil.
Release notes estão no Blog do .NET e a seção do SDK vive em What’s new in the SDK and tooling for .NET 11.
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.