21 marzo 2025 08:34
Escludere un folder dalla sorveglianza di dotnet watch
Tempo fa sono incorso in un subdolo bug che avveniva solo in ambiente di sviluppo in locale ma non in produzione.
Una pagina Blazor dove vi era un controllo di File Upload, si refreshava automaticamente impedendomi di proseguire un'azione di salvataggio post-upload.
La causa era dovuto al comportamento del comando dotnet watch che vedeva l'upload come un change al progetto e quindi faceva ripartire il meccanismo interno di browser-refresh.
NB: usando il normale Run/Debug di Visual Studio (F5 o CTRL-F5) la cosa non avviene, ma visto che l'hot-reload di VS non ha mai funzionato come si deve, mi arrangio con un comando esterno via terminal:
dotnet watch --launch-profile https
Ok, mi sono detto, ci sarà un modo per dire a dotnet watch di evitare di guardare una serie di files (es. *.qualcosa) o un determinato folder... Chiediamo alla AI:
- GEMINI: Creare un file dotnet-watch.json nella root del progetto con una proprietà watch-exclude che indica quali file o directories escludere
{
"watch-exclude": {
"files": ["**/*.log"],
"directories": ["node_modules", "bin"]
}
}
- COPILOT: Inserire nel file di progetto .csproj una sezione WatchOptions.
<PropertyGroup>
<WatchOptions>
<Watch>
<Exclude>
<Item>FolderToExclude/**</Item>
<Item>AnotherFolderToExclude/**</Item>
</Exclude>
</Watch>
</WatchOptions>
</PropertyGroup>
- CHATGPT: Inserire nel file progetto .csproj una sezione Watch
<PropertyGroup>
<EnableDefaultItems>false</EnableDefaultItems>
</PropertyGroup>
<ItemGroup>
<Watch Include="**\*.cs" Exclude="node_modules\**\*;bin\**\*;obj\**\*" />
</ItemGroup>
Ebbene tutte e tre le soluzioni NON FUNZIONANO!
Probabilmente sarà un caso, una questione di versioni del framework, un'anomalia cosmica, sta di fatto che con .net 9.0.201 la soluzione corretta per far si che una pagina non si refreshi se il contenuto di un folder cambia (new file, changed file, file removed) è quella di mettere nel file di progetto questa proprietà:
<ItemGroup>
<Content Update="wwwroot\uploads\**\*" Watch="false" />
</ItemGroup>
Grazie al collega Edoardo per l'aiuto.
