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.
La pubblicazione della tua app come Native AOT produce un'applicazione autonoma che è stata compilata in modalità anticipata nel codice nativo. Le app AOT native hanno tempi di avvio più rapidi e footprint di memoria più piccoli. Queste app possono essere eseguite nei computer in cui non è installato il runtime .NET.
Il vantaggio di AOT nativo è molto significativo per i carichi di lavoro con un numero elevato di istanze distribuite, ad esempio l'infrastruttura cloud e i servizi con iper scalabilità. .NET 8 aggiunge il supporto di ASP.NET Core per AOT nativo.
Il modello di distribuzione AOT nativo usa un compilatore in anticipo per compilare IL in codice nativo al momento della pubblicazione. Le app AOT native non usano un compilatore JIT (Just-In-Time) quando l'applicazione viene eseguita. Le app AOT native possono essere eseguite in ambienti con restrizioni in cui non è consentito un JIT. Le applicazioni AOT native sono destinate a un ambiente di runtime specifico, ad esempio Linux x64 o Windows x64, proprio come la pubblicazione di un'app autonoma.
Prerequisiti
Visual Studio 2022, incluso il carico di lavoro Sviluppo di applicazioni desktop con C++ con tutti i componenti predefiniti.
Pubblicare AOT nativo usando la CLI
Aggiungere
<PublishAot>true</PublishAot>
al file di progetto.Questa proprietà abilita la compilazione AOT nativa durante la pubblicazione. Consente anche l'analisi dinamica dell'utilizzo del codice durante la compilazione e la modifica. È preferibile inserire questa impostazione nel file di progetto anziché passarla alla riga di comando, perché controlla i comportamenti all'esterno della pubblicazione.
<PropertyGroup> <PublishAot>true</PublishAot> </PropertyGroup>
Pubblica l'applicazione per un identificatore di runtime specifico utilizzando
dotnet publish -r <RID>
.L'esempio seguente pubblica l'app per Windows come applicazione AOT nativa in un computer con i prerequisiti necessari installati.
dotnet publish -r win-x64 -c Release
L'esempio seguente pubblica l'app per Linux come applicazione AOT nativa. Un file binario AOT nativo prodotto nel computer Linux funziona solo nella stessa versione linux o successiva. Ad esempio, il file binario AOT nativo prodotto in Ubuntu 20.04 verrà eseguito in Ubuntu 20.04 e versioni successive, ma non verrà eseguito in Ubuntu 18.04.
dotnet publish -r linux-arm64 -c Release
L'app è disponibile nella directory di pubblicazione e contiene tutto il codice necessario per eseguirlo, inclusa una versione rimossa del runtime coreclr.
Consulta gli esempi di AOT nativi disponibili nel repository dotnet/samples su GitHub. Gli esempi includono Linux e Windows Dockerfile che illustrano come automatizzare l'installazione dei prerequisiti e pubblicare progetti .NET con AOT nativo usando contenitori.
Analizzatori di compatibilità AOT
La IsAotCompatible
proprietà viene utilizzata per indicare se una libreria è compatibile con AOT nativo. Si consideri quando una libreria imposta la IsAotCompatible
proprietà su true
, ad esempio:
<PropertyGroup>
<IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>
La configurazione precedente assegna un valore predefinito alle true
proprietà seguenti:
IsTrimmable
EnableTrimAnalyzer
EnableSingleFileAnalyzer
EnableAotAnalyzer
Questi analizzatori consentono di garantire che una libreria sia compatibile con AOT nativo.
Informazioni di debug nativi
Per impostazione predefinita, la pubblicazione AOT nativa produce informazioni di debug in un file separato:
- Linux: .dbg
- Windows: .pdb
- macOS: cartella dSYM
Il file di debug è necessario per eseguire l'app nel debugger o ispezionare i dump di crash. Nelle piattaforme simili a Unix impostare la StripSymbols
proprietà su false
per includere le informazioni di debug nel file binario nativo. L'inclusione delle informazioni di debug rende il file binario nativo più grande.
<PropertyGroup>
<StripSymbols>false</StripSymbols>
</PropertyGroup>
Limitazioni della distribuzione AOT nativa
Le app AOT native presentano le limitazioni seguenti:
- Nessun caricamento dinamico,
Assembly.LoadFile
ad esempio . - Nessuna generazione di codice in fase di esecuzione,
System.Reflection.Emit
ad esempio . - Nessun C++/CLI.
- Windows: nessun COM predefinito.
- Richiede il taglio, che ha delle limitazioni.
- Implica la compilazione in un unico file, che presenta incompatibilità note.
- Le app includono librerie di runtime necessarie (proprio come le app autonome, aumentandone le dimensioni rispetto alle app dipendenti dal framework).
- System.Linq.Expressions usare sempre il formato interpretato, che è più lento rispetto al codice compilato generato in fase di esecuzione.
- I parametri generici sostituiti con argomenti di tipo struct avranno codice specializzato generato per ogni istanziazione. Nel runtime dinamico vengono generate molte istanze su richiesta. In Native AOT, tutte le istanze sono generate in anticipo. Ciò può avere un impatto significativo sulle dimensioni del disco dell'applicazione. I metodi virtuali generici e i metodi di istanza generica avranno anche un'istanza per ogni tipo di implementazione o override.
- Non tutte le librerie di runtime sono completamente annotate per essere compatibili con AOT nativo. Ovvero, alcuni avvisi nelle librerie di runtime non sono utilizzabili dagli sviluppatori finali.
- Supporto diagnostico per il debug e la profilatura con alcune limitazioni.
- Supporto per alcune funzionalità di ASP.NET Core. Per altre informazioni, vedere supporto di ASP.NET Core per AOT nativo.
Il processo di pubblicazione analizza l'intero progetto e le relative dipendenze per individuare eventuali limitazioni. Gli avvisi vengono generati per ogni limitazione che l'app pubblicata potrebbe incontrare durante l'esecuzione.
Restrizioni relative alla piattaforma/architettura
La tabella seguente mostra le destinazioni di compilazione supportate.
Piattaforma | Architettura supportata | Note |
---|---|---|
Finestre | x64, Arm64 | |
Linux | x64, Arm64 | |
macOS | x64, Arm64 | |
Ios | Arm64 | Supporto sperimentale |
iOSSimulator | x64, Arm64 | Supporto sperimentale |
tvOS | Arm64 | Supporto sperimentale |
tvOSSimulator | x64, Arm64 | Supporto sperimentale |
MacCatalyst | x64, Arm64 | Supporto sperimentale |
Androide | x64, Arm64 | Sperimentale, nessuna interoperabilità predefinita con Java |
Per altre informazioni su come è supportata una piattaforma specifica con AOT nativo, seguire il collegamento dalla tabella.