In questo post affronteremo un problema che riguarda la maggior parte dei progetti ASP.NET Core durante la fase di pubblicazione.
Come molti sviluppatori già sanno, quando andiamo a pubblicare una applicazione ASP.NET Core (tramite prompt dei comandi , utilizzando il comando dotnet public, o tramite Visual Studio), il framework genera una serie di assembly satellite per il supporto alla localizzazione, raggruppandoli in una serie di cartelle relative alle varie lingue disponibili.
In conseguenza di questo automatismo, al termine del processo di pubblicazione ci si ritrova spesso con il seguente risultato:
Sebbene queste cartelle siano completamente innocue, se non supportiamo queste lingue potremmo ragionevolmente voler impedire che vengano generate.
Per fare ciò, è sufficiente aprire il file di progetto (quello che termina con il prefisso .csproj) e aggiungere l'elemento <SatelliteResourceLanguages> al primo PropertyGroup (quello contenente l'elemento TargetFramework) nel seguente modo:
1 2 3 4 5 |
<PropertyGroup> <TargetFramework>net8.0</TargetFramework> <Platforms>AnyCPU;x64</Platforms> <SatelliteResourceLanguages>en;it</SatelliteResourceLanguages> </PropertyGroup> |
L'elemento <SatelliteResourceLanguages> consente di indicare le lingue che esplicitamente supportate dalla nostra applicazione: nello scenario sopra, ad esempio, siccome intendiamo supportare solo le lingue inglese (en) e italiano (it), abbiamo aggiunto soltanto queste due.
Se questa impostazione non è sufficiente per risolvere il problema, potrebbe essere necessario apportare un'altra modifica al medesimo file di progetto.
Nello specifico, dobbiamo individuare il seguente elemento:
1 |
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.0" /> |
E aggiungere l'attributo ExcludeAssets="All" nel seguente modo:
1 |
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.0" ExcludeAssets="All" /> |
Questa impostazione, unitamente alla precedente, dovrebbe impedire la generazione di quelle cartelle una volta per tutte.
IMPORTANTE: gli esempi di cui sopra sono presi da una app che utilizza .NET 8 (v8.0.0): se la app che vogliamo "fixare" utilizza una versione diversa del framework, gli elementi menzionati avranno riferimenti diversi.
Conclusioni
Questo è tutto, almeno per il momento: ci auguriamo che questa piccola guida possa aiutare altri sviluppatori ASP.NET Core a sbarazzarsi di quelle inutili cartelle di localizzazione durante la pubblicazione delle loro app sul Web.