ASP.NET Core Publish - Eliminare le cartelle relative alle lingue non utilizzate Come impedire la generazione degli assembly satellite per il supporto multilingua (e relative cartelle) durante la pubblicazione di progetti ASP.NET Core

How to fix the "No executable found matching command dotnet-ef" error in Visual Studio with .NET Core

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:ASP.NET Core Publish - Eliminare le cartelle relative alle lingue non utilizzate

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:

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.

Per maggiori informazioni sull'elemento SatelliteResourceLanguages, consulta la guida ufficiale.

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:

E aggiungere l'attributo ExcludeAssets="All" nel seguente modo:

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.

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


The reCAPTCHA verification period has expired. Please reload the page.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.