Il blog di Sandro Rizzetto

Addio HotReload, welcome dotnet watch

 

La funzionalità di Hot Reload in Visual Studio ti permette di modificare il codice delle tue applicazioni mentre sono in esecuzione, senza dover mettere in pausa manualmente o impostare un punto di interruzione. Basta apportare una modifica supportata mentre l'app è in esecuzione e utilizzare il pulsante "Applica modifiche al codice" nella nuova esperienza di Visual Studio. Puoi attivare il Hot Reload premendo sull'icona o utilizzando la combinazione di tasti ALT+F10. Questa funzionalità ti aiuta a risparmiare tempo evitando di dover riavviare l'applicazione dopo aver apportato modifiche al codice.

Questo è quello che dice la teoria (o Copilot in questo caso), ma come molti sanno, questa feature di Visual Studio 2022 non è mai stata un fiore all'occhiello del prodotto e soprattutto con Blazor le volte che funzionava a dovere erano una percentuale minima di quelle in cui ti chiedeva di ri-compilare ad ogni cambiamento.

A partire poi dall'ultimo update (17.10.4) a me personalmente l'icona/comando si è completamente disabilitata e cercando in rete suggerimenti su come riattivarlo, ho trovato solo commenti negativi e l'invito ad abbandonarlo e passare direttamente ad usare il comando shell dotnet watch.

Caso vuole poi, che negli stessi giorni ho letto un tweet di Jimmy Engstrom (autore della preziosissima extension Blazm, che invito caldamente a installare) che diceva di aver aggiunto appunto la funzionalitá di "Run dotnet watch" facendo tasto destro sul progetto...

Comodissima, ho pensato, così non devo neanche aprire una finestra esterna di terminal o quella integrata di Developer Powershell.

In realtà mentre per alcuni progetti funziona perfettamente, per altri il sito non risponde e sembra quasi che Kestrel non venga tirato su...

La cosa si risolve velocemente specificando il parametro --launch-profile con il nome del profilo che vogliamo lanciare e che troviamo nel file launchSettings.json, quindi

dotnet watch --launch-profile https

Se lanciare ogni volta una finestra di PS o di terminal può sembrare scomodo, viene subito in mente di usare quella integrata in VS (Ctrl-ö sulla mia tastiera tedesca, Ctrl-ò su quelle ita...) che è si comoda ma ha il grande difetto di non permettere di fare Ctrl-R per ricompilare il progetto; la combinazione viene infatti intercettata da VS che si aspetta un secondo tasto, ergo non funziona. Inoltre se ci facciamo uno script tipo "launch.ps1" per evitare di scrivere ogni volta il comando, l'ambiente non dispone dei diritti che ha invece una finestra 

Ricapitolando:

  • Tasto Destro sul progetto tramite l'estensione Blazm lancia solo "dotnet watch" e non si può specificare o forzare il profilo da lanciare
  • usare la Developer powershell non permette di ri-compilare al volo quando serve (ctrl-r non funzionante) e non permette di lanciare script (se non spippolando con Set-ExecutionPolicy)
  • una finestra PS esterna è la cosa più comoda, basta prendere l'abitudine di non chiuderla ma di fare Ctrl-C quando si vuole stoppare il progetto

Nel video qui sotto trovate un esempio di sessione su un progetto abbastanza corposo (multi-layer, con molte librerie, ecc.) dove come potete vedere la fluidità e la velocità nei vari changes è sicuramente maggiore che non ricompilare ogni volta...

 

Buon dotnet watch a tutti...

UPDATE 02/08/2024: Su consiglio di Jimmy Engström, autore della Blazm extension, mettendo il profile "https" come primo (ovvero scambiandolo con "http") diventa il default e quindi funziona il tasto destro sul progetto... Molto più comodo!!

Aggiungi Commento

Copyright © 1997-2025 Sandro Rizzetto | All Rights Reserved | Riproduzione delle fotografie vietata | Powered by me