Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Publikowanie aplikacji jako Native AOT tworzy aplikację, która jest samowystarczalna i która została skompilowana z wyprzedzeniem (AOT) do kodu natywnego. Natywne aplikacje AOT mają krótszy czas uruchamiania i mniejsze zużycie pamięci. Te aplikacje mogą działać na maszynach, na których nie zainstalowano środowiska uruchomieniowego platformy .NET.
Korzyści wynikające z natywnego użycia funkcji AOT są najważniejsze w przypadku obciążeń z dużą liczbą wdrożonych wystąpień, takich jak infrastruktura chmury i usługi hiperskalowania. Platforma .NET 8 dodaje obsługę platformy ASP.NET Core dla natywnej usługi AOT.
Natywny model wdrażania AOT używa kompilatora z wyprzedzeniem do kompilowania języka IL do kodu natywnego w momencie publikowania. Natywne aplikacje AOT nie używają kompilatora just in time (JIT), gdy aplikacja jest uruchomiona. Natywne aplikacje AOT mogą działać w środowiskach z ograniczeniami, w których JIT nie jest dozwolony. Natywne aplikacje AOT są przeznaczone dla określonego środowiska uruchomieniowego, takiego jak Linux x64 lub Windows x64, podobnie jak publikowanie samodzielnej aplikacji.
Wymagania wstępne
Program Visual Studio 2022 lub nowszy, w tym programowanie aplikacji klasycznych z obciążeniem języka C++ ze wszystkimi składnikami domyślnymi.
Publikuj natywny AOT za pomocą CLI
Dodaj
<PublishAot>true</PublishAot>do pliku projektu.Ta właściwość umożliwia kompilację natywnej AOT podczas publikowania. Umożliwia również dynamiczną analizę użycia kodu podczas kompilacji i edytowania. Zaleca się umieszczenie tego ustawienia w pliku projektu, a nie przekazanie go w wierszu polecenia, ponieważ kontroluje zachowania poza publikowaniem.
<PropertyGroup> <PublishAot>true</PublishAot> </PropertyGroup>Opublikuj aplikację dla określonego identyfikatora środowiska uruchomieniowego przy użyciu
dotnet publish -r <RID>.Poniższy przykład publikuje aplikację dla systemu Windows jako natywną aplikację AOT na maszynie z zainstalowanymi wymaganymi wymaganiami wstępnymi.
dotnet publish -r win-x64 -c ReleasePoniższy przykład publikuje aplikację dla systemu Linux jako natywną aplikację AOT. Natywny plik binarny AOT utworzony na maszynie z systemem Linux będzie działać tylko w tej samej lub nowszej wersji systemu Linux. Na przykład natywny plik binarny AOT utworzony w systemie Ubuntu 20.04 będzie działać w systemie Ubuntu 20.04 lub nowszym, ale nie będzie działać w systemie Ubuntu 18.04.
dotnet publish -r linux-arm64 -c Release
Aplikacja jest dostępna w katalogu publikacji i zawiera cały kod potrzebny do jej uruchomienia, w tym odchudzoną wersję środowiska uruchomieniowego coreclr.
Zapoznaj się z przykładami natywnymi AOT dostępnymi w repozytorium dotnet/samples w witrynie GitHub. Przykłady obejmują pliki Dockerfile dla systemów Linux i Windows, które pokazują, jak zautomatyzować instalację prerekwizytów i publikować projekty platformy .NET z użyciem funkcji Native AOT w kontenerach.
Analizatory zgodności AOT
Właściwość IsAotCompatible służy do określania, czy biblioteka jest zgodna z natywnym AOT. Rozważ, kiedy biblioteka ustawia IsAotCompatible właściwość na true, na przykład:
<PropertyGroup>
<IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>
Poprzednia konfiguracja przypisuje wartość domyślną true do następujących właściwości:
IsTrimmableEnableTrimAnalyzerEnableSingleFileAnalyzerEnableAotAnalyzer
Te analizatory pomagają upewnić się, że biblioteka jest zgodna z natywną funkcją AOT.
Sprawdź, czy zestawy, do których się odwołujesz, są zgodne z AOT (Ahead-Of-Time)
Po włączeniu analizy AOT dla biblioteki można opcjonalnie włączyć weryfikację, że wszystkie przywoływane zestawy są również oznaczone jako adnotacje dla zgodności AOT, ustawiając VerifyReferenceAotCompatibility właściwość na true:
<PropertyGroup>
<IsAotCompatible>true</IsAotCompatible>
<VerifyReferenceAotCompatibility>true</VerifyReferenceAotCompatibility>
</PropertyGroup>
Gdy ta właściwość jest włączona, analizator ostrzega o wszelkich zestawach, na które wskazują odwołania, które nie zawierają IsAotCompatible metadanych. Dzięki temu wszystkie zależności w projekcie są oznaczone adnotacjami dla zgodności z natywnym AOT. Ostrzeżenie, które jest emitowane, to IL3058.
Ta weryfikacja jest włączona, ponieważ:
- Nie wszystkie biblioteki zgodne z funkcją
IsAotCompatibleAOT zostały zaktualizowane w celu uwzględnienia metadanych. - Ostrzeżenie może być nadmiarowe, jeśli masz wiele zależności, które działają poprawnie z Native AOT, ale nie są wyraźnie oznaczone w ten sposób.
Uwaga / Notatka
Metadane IsAotCompatible zestawu zostały wprowadzone na platformie .NET 10. Biblioteki, które zostały opublikowane dla wcześniejszych wersji platformy .NET, nie będą miały tego atrybutu, nawet jeśli zostały skompilowane z użyciem <IsAotCompatible>true</IsAotCompatible>.
Rozważ włączenie tej weryfikacji, jeśli chcesz upewnić się, że wszystkie zależności są jawnie oznaczone jako zgodne z AOT przez ich autorów.
Informacje o debugowaniu natywnym
Domyślnie publikowanie natywnych aplikacji AOT generuje informacje debugowania w osobnym pliku.
- Linux: .dbg
- Windows: .pdb
- macOS: folder .dSYM
Plik debugowania jest niezbędny do uruchamiania aplikacji w debugerze lub inspekcji zrzutów awaryjnych. Na platformach podobnych do systemu Unix ustaw właściwość StripSymbols na false, aby uwzględnić informacje debugowania w natywnym pliku binarnym. Dołączenie informacji debugowania sprawia, że natywny plik binarny jest większy.
<PropertyGroup>
<StripSymbols>false</StripSymbols>
</PropertyGroup>
Ograniczenia wdrożenia natywnej usługi AOT
Natywne aplikacje AOT mają następujące ograniczenia:
- Brak dynamicznego ładowania, na przykład
Assembly.LoadFile. - Brak generowania kodu środowiska uruchomieniowego, na przykład
System.Reflection.Emit. - Brak języka C++/interfejsu wiersza polecenia.
- Windows: brak wbudowanego COM.
- Wymaga przycinania, które ma ograniczenia.
- Implikuje kompilację do jednego pliku, co powoduje znane niezgodności.
- Aplikacje obejmują wymagane biblioteki środowiska uruchomieniowego (podobnie jak aplikacje samodzielne, zwiększając ich rozmiar w porównaniu z aplikacjami zależnymi od platformy).
- System.Linq.Expressions zawsze używaj ich interpretowanego formularza, który jest wolniejszy niż wygenerowany przez środowisko uruchomieniowe skompilowany kod.
- Parametry ogólne zastąpione argumentami typu struktury mają wyspecjalizowany kod wygenerowany dla każdego wystąpienia. W dynamicznym środowisku uruchomieniowym wiele wystąpień jest generowanych na żądanie. W Native AOT wszystkie wystąpienia są wstępnie generowane. Może to mieć znaczący wpływ na rozmiar dysku aplikacji. Ogólne metody wirtualne i generyczne metody instancji będą miały instancję dla każdego typu implementującego lub zastępującego.
- Nie wszystkie biblioteki środowiska uruchomieniowego są w pełni oznaczone jako zgodne z natywną funkcją AOT. Oznacza to, że niektóre ostrzeżenia w bibliotekach środowiska uruchomieniowego nie mogą być wykorzystane przez deweloperów końcowych.
- Obsługa diagnostyki debugowania i profilowania z pewnymi ograniczeniami.
- Obsługa niektórych funkcji ASP.NET Core. Aby uzyskać więcej informacji, zobacz ASP.NET Core support for Native AOT (Obsługa natywnej funkcji AOT w systemie ASP.NET Core).
Proces publikowania analizuje cały projekt i jego zależności pod kątem możliwych ograniczeń. Ostrzeżenia są wydawane dla każdego ograniczenia, które opublikowana aplikacja może napotkać w czasie wykonywania.
Ograniczenia dotyczące platformy/architektury
W poniższej tabeli przedstawiono obsługiwane cele kompilacji.
| Platforma | Obsługiwana architektura | Notatki |
|---|---|---|
| Windows | x64, Arm64 | |
| Linuxa | x64, Arm64 | |
| macOS | x64, Arm64 | |
| Ios | Arm64 | Wsparcie eksperymentalne |
| iOSSimulator | x64, Arm64 | Wsparcie eksperymentalne |
| tvOS | Arm64 | Wsparcie eksperymentalne |
| tvOSSimulator | x64, Arm64 | Wsparcie eksperymentalne |
| MacCatalyst | x64, Arm64 | Wsparcie eksperymentalne |
| Android | x64, Arm64 | Eksperymentalny, brak wbudowanej interoperacyjności z Javą |
Aby uzyskać więcej informacji na temat sposobu obsługi określonej platformy za pomocą natywnej funkcji AOT, postępuj zgodnie z linkiem z tabeli.