Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nota
Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 10 di questo articolo.
Avviso
Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere i criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Questo articolo descrive gli strumenti di compilazione per le app autonome Blazor WebAssembly e come compilare un'app prima della distribuzione con compilazione anticipata (AOT).
Strumenti di compilazione WebAssembly .NET
Gli strumenti di compilazione .NET WebAssembly sono basati su Emscripten, una toolchain del compilatore per la piattaforma Web.
Per installare gli strumenti di compilazione come carico di lavoro .NET, usare uno degli approcci seguenti:
Per il carico di lavoro ASP.NET e sviluppo Web nel programma di installazione di Visual Studio, selezionare l'opzione Strumenti di compilazione .NET WebAssembly dall'elenco dei componenti facoltativi. L'opzione garantisce quanto segue:
- Il carico di lavoro viene installato per la versione più recente di .NET SDK.
- Quando viene rilasciata una nuova versione di Visual Studio e contiene un nuovo SDK .NET, l'opzione installa il carico di lavoro per il nuovo SDK.
In alternativa, eseguire il comando seguente in una shell dei comandi amministrativa per installare il carico di lavoro più recente nell'SDK .NET più recente disponibile nel sistema:
dotnet workload install wasm-tools
Per specificare come destinazione una versione .NET precedente con un determinato SDK .NET, è necessario installare il wasm-tools-net{MAJOR VERSION} carico di lavoro:
- Il
{MAJOR VERSION}segnaposto viene sostituito con il numero di versione principale della versione .NET di destinazione( ad esempio,wasm-tools-net8per .NET 8). - I carichi di lavoro vengono installati per .NET SDK. L'installazione del
wasm-toolsworkload per un SDK non lo rende disponibile agli altri SDK nel sistema. - È necessario installare il carico di lavoro appropriato per ogni versione di .NET SDK che si intende usare.
L'elenco seguente mostra il carico di lavoro da installare per ogni SDK .NET, a seconda delle app di destinazione. Anche se più righe possono contenere lo stesso nome del carico di lavoro, i carichi di lavoro differiscono sempre leggermente per ogni particolare .NET SDK.
- Uso di .NET 10 SDK
- Puntare a .NET 10 richiede
wasm-tools. - Il targeting di .NET 9 richiede
wasm-tools-net9. - La destinazione di .NET 8 richiede
wasm-tools-net8.
- Puntare a .NET 10 richiede
- Uso di .NET 9 SDK
- Il targeting di .NET 9 richiede
wasm-tools. - La destinazione di .NET 8 richiede
wasm-tools-net8.
- Il targeting di .NET 9 richiede
- L'uso di .NET 8 SDK: per targeting .NET 8 è necessario
wasm-tools.
Compilazione anticipata (AOT)
Blazor WebAssembly supporta la compilazione anticipata (AOT), in cui è possibile compilare il codice .NET direttamente in WebAssembly. La compilazione AOT comporta miglioramenti delle prestazioni di runtime a scapito di dimensioni maggiori dell'app.
Senza abilitare la compilazione AOT, Blazor WebAssembly le app vengono eseguite nel browser usando un interprete .NET Intermediate Language (IL) implementato in WebAssembly con supporto di runtime JIT parziale, noto in modo informale come Jiterpreter. Poiché il codice .NET IL viene interpretato, le app vengono in genere eseguite più lentamente rispetto a quelle eseguite in un runtime JIT .NET lato server senza alcuna interpretazione IL. La compilazione AOT risolve questo problema di prestazioni compilando il codice .NET di un'app direttamente in WebAssembly per l'esecuzione nativa di WebAssembly dal browser. Il miglioramento delle prestazioni AOT può produrre miglioramenti notevoli per le app che eseguono attività a elevato utilizzo di CPU. Lo svantaggio dell'uso della compilazione AOT è che le app compilate da AOT sono in genere più grandi delle controparti interpretate con IL, quindi in genere richiedono più tempo per il download nel client quando richiesto per la prima volta.
Senza abilitare la compilazione AOT, Blazor WebAssembly le app vengono eseguite nel browser usando un interprete .NET Intermediate Language (IL) implementato in WebAssembly. Poiché il codice .NET viene interpretato, le app vengono in genere eseguite più lentamente rispetto a quelle in un runtime JIT (Just-In-Time) sul lato server. La compilazione AOT risolve questo problema di prestazioni compilando il codice .NET di un'app direttamente in WebAssembly per l'esecuzione nativa di WebAssembly dal browser. Il miglioramento delle prestazioni AOT può produrre miglioramenti notevoli per le app che eseguono attività a elevato utilizzo di CPU. Lo svantaggio dell'uso della compilazione AOT è che le app compilate da AOT sono in genere più grandi delle controparti interpretate con IL, quindi in genere richiedono più tempo per il download nel client quando richiesto per la prima volta.
Per indicazioni sull'installazione degli strumenti di compilazione WebAssembly .NET, vedere ASP.NET Core Blazor WebAssembly build tools and ahead-of-time (AOT).
Per abilitare la compilazione WebAssembly AOT, aggiungere la <RunAOTCompilation> proprietà impostata al trueBlazor WebAssembly file di progetto dell'app:
<PropertyGroup>
<RunAOTCompilation>true</RunAOTCompilation>
</PropertyGroup>
Per compilare l'app in WebAssembly, pubblicare l'app. La pubblicazione della Release configurazione garantisce che venga eseguito anche il collegamento .NET Intermediate Language (IL) per ridurre le dimensioni dell'app pubblicata:
dotnet publish -c Release
La compilazione AOT webAssembly viene eseguita solo quando il progetto viene pubblicato. La compilazione AOT non viene usata quando il progetto viene eseguito durante lo sviluppo (Development ambiente) perché la compilazione AOT richiede in genere alcuni minuti su progetti di piccole dimensioni e potenzialmente molto più lunga per i progetti più grandi. La riduzione del tempo di compilazione per la compilazione AOT è in fase di sviluppo per le versioni future di ASP.NET Core.
Le dimensioni di un'app compilata Blazor WebAssembly con AOT sono in genere superiori alle dimensioni dell'app se compilate in .NET IL:
Anche se la differenza di dimensioni dipende dall'app, la maggior parte delle app compilate da AOT è circa il doppio delle dimensioni delle versioni compilate con IL. Ciò significa che l'uso della compilazione AOT impedisce le prestazioni in fase di caricamento per le prestazioni di runtime. Se questo compromesso vale la pena usare la compilazione AOT dipende dalla tua app. Blazor WebAssembly le app che richiedono un utilizzo intensivo della CPU in genere traggono il maggior vantaggio dalla compilazione AOT.
Le dimensioni maggiori di un'app compilata con AOT sono dovute a due condizioni:
- È necessario altro codice per rappresentare istruzioni .NET il di alto livello in WebAssembly nativo.
- AOT non elimina le DLL gestite quando l'app viene pubblicata. Blazor richiede le DLL per i metadati di reflection e per supportare determinate funzionalità di runtime .NET. La richiesta delle DLL nel client aumenta le dimensioni del download, ma offre un'esperienza .NET più compatibile.
Nota
Per le proprietà e le destinazioni di MSBuild mono/WebAssembly, vedere WasmApp.Common.targets (dotnet/runtime repository GitHub). La documentazione ufficiale per le proprietà comuni di MSBuild è pianificata per Document blazor msbuild configuration options (dotnet/docs #27395).
Prestazioni
Per indicazioni sulle prestazioni, vedere Prestazioni di runtime ASP.NET CoreBlazor WebAssembly:
- Dimensioni dell'heap per alcuni browser per dispositivi mobili
- Ricollegamento del runtime
- Singola istruzione, più dati (SIMD)
- Trim .NET IL dopo la compilazione AOT (compilazione anticipata) (.NET 8 o versioni successive)
Gestione delle eccezioni
La gestione delle eccezioni è abilitata per impostazione predefinita. Per disabilitare la gestione delle eccezioni, aggiungere la <WasmEnableExceptionHandling> proprietà con un valore di false nel file di progetto dell'app (.csproj):
<PropertyGroup>
<WasmEnableExceptionHandling>false</WasmEnableExceptionHandling>
</PropertyGroup>
Per abilitare la gestione delle eccezioni WebAssembly, aggiungere la <WasmEnableExceptionHandling> proprietà con un valore di true nel file di progetto dell'app (.csproj):
<PropertyGroup>
<WasmEnableExceptionHandling>true</WasmEnableExceptionHandling>
</PropertyGroup>
Per ulteriori informazioni, vedi le seguenti risorse:
- Configurazione e hosting di applicazioni WebAssembly .NET: EH - Gestione delle eccezioni
- Gestione delle eccezioni