Trimming delle distribuzioni autonome e degli eseguibili

Il modello di distribuzione dipendente dal framework è stato il modello di distribuzione più efficace sin dall'introduzione di .NET. In questo scenario, lo sviluppatore dell'applicazione aggrega solo l’applicazione e gli assembly di terze parti con l’aspettativa che il runtime e le librerie di runtime .NET saranno disponibili nel computer client. Questo modello di distribuzione continua a essere quello dominante nella versione più recente di .NET, tuttavia, esistono alcuni scenari in cui il modello dipendente dal framework non è la scelta migliore. L'alternativa consiste nel pubblicare un'applicazione autonoma, in cui il runtime e le librerie di runtime .NET vengono raggruppati insieme all'applicazione e agli assembly di terze parti.

Il modello di distribuzione riduzione-autonomo è una versione specializzata del modello di distribuzione autonomo ottimizzato per ridurre le dimensioni della distribuzione. Ridurre al minimo le dimensioni della distribuzione è un requisito fondamentale per alcuni scenari lato client, come ad esempio le applicazioni Blazor. A seconda della complessità dell'applicazione, viene fatto riferimento solo a un sottoinsieme di assembly del framework e per eseguire l'applicazione è necessario un sottoinsieme del codice all'interno di ogni assembly. Le parti inutilizzate delle librerie non sono necessarie e possono essere eliminate dall'applicazione in pacchetto.

Tuttavia, esiste un rischio che l'analisi in fase di compilazione dell'applicazione possa causare errori in fase di esecuzione, non essendo in grado di analizzare in modo affidabile vari modelli di codice problematici (in gran parte centrati sull'uso della reflection). Per attenuare questi problemi, gli avvisi vengono generati ogni volta che il trimmer non è in grado di analizzare completamente un modello di codice. Per informazioni sul significato degli avvisi di riduzione e su come risolverli, vedere Introduzione agli avvisi di riduzione.

Nota

  • La riduzione è completamente supportata in .NET 6 e versioni successive. In .NET Core 3.1 e .NET 5, la riduzione è una funzionalità sperimentale.
  • La riduzione è disponibile solo per le applicazioni pubblicate in modalità autonoma.

Componenti che causano problemi di riduzione

Avviso

Non tutti i tipi di progetto possono essere ridotti. Per altre informazioni, vedere Incompatibilità di riduzione note.

Qualsiasi codice che causa problemi di analisi del tempo di compilazione non è adatto alla riduzione. Alcuni modelli di codifica comuni che sono problematici quando vengono usati da un'applicazione provengono dall'utilizzo di reflection senza vincoli e dalle dipendenze esterne che non sono visibili in fase di compilazione. Un esempio di reflection senza vincoli è un serializzatore legacy, ad esempio serializzazione XML e un esempio di dipendenze esterne invisibili è COM predefinito. Per risolvere gli avvisi di riduzione nell'applicazione, vedere Introduzione agli avvisi di riduzione e per rendere la libreria compatibile con la riduzione, vedere Preparare le librerie .NET per la riduzione.

Abilitare la riduzione

  1. Aggiungere <PublishTrimmed>true</PublishTrimmed> al file di progetto.

    Questa proprietà produrrà un'app ridotta nella pubblicazione autonoma. Disattiva anche le funzionalità non compatibili con la riduzione e mostra gli avvisi di compatibilità della riduzione durante la compilazione.

    <PropertyGroup>
        <PublishTrimmed>true</PublishTrimmed>
    </PropertyGroup>
    
  2. Pubblicare quindi l'app usando il comando dotnet publish o Visual Studio.

Pubblicare con l'interfaccia della riga di comando

L'esempio seguente pubblica l'app per Windows come applicazione autonoma ridotta.

dotnet publish -r win-x64

La riduzione è supportata solo per le app autonome.

<PublishTrimmed> deve essere impostato nel file di progetto in modo che le funzionalità non compatibili con la riduzione vengano disabilitate durante dotnet build. Tuttavia, è anche possibile impostare questa opzione come argomento in dotnet publish:

dotnet publish -r win-x64 -p:PublishTrimmed=true

Per altre informazioni, vedere Pubblicare app .NET con l'interfaccia della riga di comando di .NET.

Pubblicare con Visual Studio

  1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul progetto da pubblicare e selezionare Pubblica.

    Solution Explorer with a right-click menu highlighting the Publish option.

    Se non si ha già un profilo di pubblicazione, seguire le istruzioni per crearne uno e scegliere la Cartella tipo di destinazione.

  2. Scegliere Altre azioni>Modifica.

    Visual studio publish profile with edit button.

  3. Nella finestra di dialogo Impostazioni di profilo, impostare le opzioni seguenti:

    • Impostare Modalità di distribuzione su Autonomo.
    • Impostare Runtime di destinazione sulla piattaforma in cui si vuole pubblicare.
    • Selezionare Eliminare codice inutilizzato.

    Scegliere Salva per salvare le impostazioni e tornare alla finestra di dialogo Pubblica.

    Profile settings dialog with deployment mode, target runtime, and trim unused assemblies options highlighted.

  4. Scegliere Pubblica per pubblicare l'app ridotta.

Per altre informazioni, vedere Pubblicare app .NET Core con Visual Studio.

Pubblicare con Visual Studio per Mac

Visual Studio per Mac non offre opzioni per pubblicare l'app. Sarà necessario pubblicare manualmente seguendo le istruzioni della sezione Pubblicazione con l'interfaccia della riga di comando. Per altre informazioni, vedere Pubblicare app .NET con l'interfaccia della riga di comando di .NET.

Vedi anche