Start Debugging

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.

< Voltar