Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
.NET wieloplatformowe aplikacje interfejsu użytkownika aplikacji (.NET MAUI) mogą używać różnych środowisk uruchomieniowych i strategii kompilacji w zależności od platformy docelowej, konfiguracji kompilacji i modelu wdrażania. W tym artykule wyjaśniono kluczowe terminy oraz strategie środowiska uruchomieniowego i kompilacji, które .NET MAUI używać na każdej platformie.
Środowiska uruchomieniowe
Środowisko uruchomieniowe platformy .NET to środowisko wykonawcze, które zarządza pamięcią aplikacji, systemem typów, odzyskiwaniem pamięci i wykonywaniem kodu. Aplikacje .NET MAUI korzystają z jednego z następujących środowisk uruchomieniowych:
Mono
Mono to międzyplatformowe środowisko uruchomieniowe .NET, które historycznie obsługuje aplikacje Xamarin i aplikacje .NET MAUI w systemach Android, iOS i Mac Catalyst. Mono obsługuje kompilację just in time (JIT) i kompilację przed czasem (AOT). Mono to domyślne środowisko uruchomieniowe dla aplikacji MAUI platformy .NET na platformach mobile i Mac Catalyst.
Mono nie jest obsługiwane w przypadku aplikacji .NET MAUI przeznaczonych dla .NET 11 lub nowszych.
CoreCLR
CoreCLR to wspólne środowisko uruchomieniowe języka platformy .NET używane na środowiskach desktopowych i serwerowych. Obsługuje ASP.NET Core, aplikacje konsolowe i aplikacje klasyczne Windows. CoreCLR oferuje wysoce optymalizowanie kompilatora JIT, kompilacji warstwowej i pełnego zestawu diagnostyki środowiska uruchomieniowego.
W programie .NET MAUI coreCLR jest środowiskiem uruchomieniowym używanym w systemie Windows. W .NET 10 coreCLR jest również dostępna jako opcja eksperymentalna dla systemu Android.
W .NET wersji 11 lub nowszej coreCLR jest domyślnym środowiskiem uruchomieniowym aplikacji .NET MAUI w Windows, Android, iOS i Mac Catalyst. NativeAOT to opcjonalna alternatywa do publikowania dla wszystkich platform docelowych .NET 11. Obsługa nativeAOT jest eksperymentalna w systemie Android.
NativeAOT
Podczas publikowania za pomocą natywnej funkcji AOT aplikacja nie jest uruchamiana w środowisku uruchomieniowym CoreCLR. Zamiast tego działa w minimalnym środowisku uruchomieniowym NativeAOT, które jest statycznie powiązane z natywnym plikiem binarnym. To środowisko uruchomieniowe obejmuje mechanizm odśmiecania pamięci i system typów, ale nie kompilator JIT ani interpreter. Cały kod jest kompilowany do natywnego kodu maszynowego w czasie kompilacji.
Strategie kompilacji
Strategia kompilacji określa sposób, w jaki kod języka C# jest zamieniany w kod maszynowy, który procesor może wykonać. Program .NET MAUI używa kilku strategii kompilacji w zależności od środowiska uruchomieniowego i scenariusza wdrażania.
Kompilacja JIT (just in time)
Kompilacja JIT tłumaczy język Microsoft Intermediate Language (MSIL) na natywny kod maszynowy w czasie wykonywania, ponieważ metody są wywoływane po raz pierwszy. Kompilacja JIT umożliwia szybkie cykle kompilacji, wdrażania i debugowania oraz funkcje takie jak Edytuj i kontynuuj.
- Używane przez: CoreCLR w Windows i eksperymentalnie w systemie Android; Mono w kompilacjach debugowania systemu Android
- Zalety: szybkie czasy kompilacji, diagnostyka pełnego środowiska uruchomieniowego i obsługa dynamicznego generowania kodu
- Wady: wolniejsze uruchamianie, ponieważ kod jest kompilowany na urządzeniu w czasie wykonywania
- Używane przez: CoreCLR w systemach Windows i Android
- Zalety: szybkie czasy kompilacji, diagnostyka pełnego środowiska uruchomieniowego i obsługa dynamicznego generowania kodu
- Wady: wolniejsze uruchamianie, gdy kod nie został jeszcze skompilowany przez ReadyToRun
Targety urządzeń Apple CoreCLR nie używają trybu JIT, ponieważ ograniczenia platformy Apple uniemożliwiają dynamiczne generowanie kodu natywnego. Zamiast tego używają interpretera CoreCLR.
Kompilacja Mono AOT (kompilacja wyprzedzająca)
Kompilacja mono AOT wstępnie kompiluje język MSIL w kodzie natywnym w czasie kompilacji przy użyciu kompilatora AOT mono. Jest to domyślny tryb kompilacji w wersji .NET MAUI na iOS, Mac Catalyst i Android.
- Używane przez: środowisko uruchomieniowe Mono w systemach iOS, Mac Catalyst i Android
- Zalety: szybsze uruchamianie niż JIT i wymagane dla platform, które ograniczają generowanie kodu dynamicznego
- Wady: większy rozmiar aplikacji niż w przypadku kompilacji wyłącznie JIT oraz ograniczona obsługa niektórych funkcji dynamicznych
Mono AOT nie jest taki sam jak NativeAOT. Aplikacja mono AOT nadal zawiera środowisko uruchomieniowe Mono i opcjonalnie może używać interpretera Mono dla kodu, który nie został skompilowany przez usługę AOT. NativeAOT kompiluje cały kod z wyprzedzeniem i nie zawiera kompilatora JIT ani interpretera. Mono obsługuje również tryb Pełny AOT, w którym nie jest dostępny interpreter ani tryb JIT. Pełna funkcja AOT jest używana domyślnie w przypadku wersji Mono w systemach iOS i Mac Catalyst.
Kompilacja NativeAOT (natywna kompilacja z wyprzedzeniem)
NativeAOT kompiluje całą aplikację, jej zależności i minimalne środowisko uruchomieniowe w natywnym pliku binarnym w czasie kompilacji. W czasie wykonywania nie ma kompilatora ani interpretera JIT. Funkcja NativeAOT wykonuje pełne przycinanie i analizę statyczną, co może generować mniejsze rozmiary aplikacji i szybsze czasy uruchamiania, ale nakłada więcej ograniczeń na wzorce kodu, których można użyć.
- Dostępne w: aplikacjach platformy .NET MAUI na iOS i Mac Catalyst po jawnym włączeniu publikowania
- Zalety: mały rozmiar aplikacji, szybkie uruchamianie i pojedynczy natywny plik binarny
- Wady: dłuższe czasy kompilacji, brak dynamicznego generowania kodu i dynamicznego ładowania, a cały kod musi być bezpieczny względem przycinania i kompatybilny z AOT
-
Właściwość MSBuild:
<PublishAot>true</PublishAot>
- Dostępne w: wszystkie elementy docelowe .NET MAUI, gdy jawnie włączono funkcję publikowania. Obsługa nativeAOT jest eksperymentalna w systemie Android.
- Zalety: mały rozmiar aplikacji, szybkie uruchamianie i pojedynczy natywny plik binarny
- Wady: dłuższe czasy kompilacji, brak dynamicznego generowania kodu i dynamicznego ładowania, a cały kod musi być bezpieczny względem przycinania i kompatybilny z AOT
-
Właściwość MSBuild:
<PublishAot>true</PublishAot>
NativeAOT to model wdrażania wyłącznie do publikowania. Użyj dotnet publish, aby utworzyć i zweryfikować aplikację NativeAOT. Zwykła kompilacja debugowania nie używa funkcji NativeAOT.
Aby uzyskać więcej informacji, zobacz Natywne wdrażanie AOT w systemach iOS i Mac Catalyst oraz natywne wdrożenie AOT.
ReadyToRun (R2R)
ReadyToRun to forma kompilacji wyprzedzającej dla CoreCLR, która prekompiluje asemblacje do formatu zawierającego zarówno oryginalny kod MSIL, jak i natywną reprezentację kodu. Podczas uruchamiania środowisko uruchomieniowe może używać wstępnie skompilowanego kodu natywnego zamiast kompilowania metod z biblioteki MSIL. Na platformach, na których jest dostępny dostęp do trybu JIT, środowisko uruchomieniowe nadal może kompilować metody JIT, które nie są wstępnie skompilowane i optymalizują często używane metody w czasie wykonywania.
- Używane przez: CoreCLR w systemie Windows oraz kompilacje CoreCLR dla systemu Android, które korzystają z eksperymentalnego środowiska uruchomieniowego
- Zalety: Ulepszony czas uruchamiania przy zachowaniu zgodności JIT
- Wady: większe rozmiary zestawów, ponieważ zestawy zawierają zarówno MSIL, jak i kod macierzysty
-
Właściwość MSBuild:
<PublishReadyToRun>true</PublishReadyToRun>
Funkcja ReadyToRun jest domyślnie włączona dla aplikacji .NET MAUI w trybie Windows Release i dla aplikacji systemu Android korzystających z trybu CoreCLR (eksperymentalne).Release
Obrazy R2R są pakowane wewnątrz .dll plików.
- Używane przez: CoreCLR w Windows, Android, iOS i Mac Catalyst
- Zalety: ulepszony czas uruchamiania przy zachowaniu odpowiedniego zachowania kompilacji środowiska uruchomieniowego
- Wady: Większe rozmiary aplikacji i pobieranych plików
W przypadku aplikacji na Androida funkcja ReadyToRun jest domyślnie włączona w konfiguracji Release. Wartością domyślną jest częściowa funkcja ReadyToRun. Tryb Full ReadyToRun można włączyć za pomocą polecenia MauiEnableFullReadyToRun=true. Może ona poprawić wydajność uruchamiania lub środowiska uruchomieniowego, ale zwiększa rozmiar pakietu, więc zmierz wynik aplikacji.
Funkcja ReadyToRun, w tym złożona funkcja ReadyToRun, wymaga PublishTrimmed=true w systemie Android. Jeśli funkcja ReadyToRun jest włączona, ale PublishTrimmed nie jest true, zestaw SDK systemu Android wyłącza zarówno XA0119, jak i PublishReadyToRun, oraz zgłasza ostrzeżenie PublishReadyToRunComposite. Pozostaw włączone przycinanie, aby użyć częściowego lub pełnego ReadyToRun.
W przypadku aplikacji dla systemów iOS i Mac Catalyst w kompilacjach Debug stosuje się częściowy złożony model ReadyToRun, a w kompilacjach Release — pełny złożony model ReadyToRun. Interpreter CoreCLR jest zawsze włączony i wykonuje kod, który nie jest wstępnie skompilowany, ponieważ te platformy nie zezwalają na kompilację JIT.
Złożony R2R kompiluje zestawy razem, umożliwiając optymalizacje między zestawami. Częściowe R2R prekompiluje wybrane metody, pozostawiając pozostałe metody do kompilacji w czasie wykonywania, podczas gdy pełne R2R prekompiluje więcej metod, ale nie gwarantuje, że każda metoda została prekompilowana. Metody, które nie są wstępnie skompilowane, są kompilowane w czasie wykonywania przez JIT lub interpreter, w zależności od platformy.
Aby uzyskać więcej informacji, zobacz Kompilacja ReadyToRun.
Optymalizacja sterowana profilem (PGO)
Optymalizacja sterowana profilem (PGO) używa danych profilowania w celu kierowania kompilatorem w celu tworzenia bardziej wydajnego kodu. W kontekście .NET MAUI istnieją dwie formy PGO:
-
Statyczny protokół PGO z profilami MIBC: .NET MAUI dostarcza
.mibcpliki profilów zawierające dane dotyczące metod często wywoływanych podczas typowego uruchamiania i użycia aplikacji. Gdy kompilacja ReadyToRun jest włączona, kompilator R2R używa tych profilów, aby zdecydować, które metody mają być wstępnie skompilowane. - Dynamiczne PGO: w CoreCLR kompilator JIT może zbierać dane profilowania w czasie wykonywania i wykorzystywać je, gdy metody są ponownie kompilowane z większą liczbą optymalizacji.
Aby uzyskać więcej informacji, zobacz Optymalizacja sterowana profilami i Kompilacja ReadyToRun (gotowa do uruchomienia).
Interpretator mono
Interpreter Mono umożliwia aplikacji interpretowanie MSIL w czasie wykonywania bez dynamicznego generowania kodu natywnego. Jest on używany razem z usługą Mono AOT na platformach, które nie zezwalają na kompilację JIT, taką jak urządzenia z systemem iOS.
Interpreter Mono umożliwia również szybkie przeładowanie .NET dla aplikacji działających w środowisku uruchomieniowym Mono.
UseInterpreter jest domyślnie ustawiona na true w trybie Debug na Androidzie, iOS i Mac Catalyst.
- Używane przez: środowisko uruchomieniowe Mono
- Zalety: obsługuje funkcje dynamiczne, których usługa AOT nie może obsłużyć, włącza .NET Przeładowywanie na gorąco i może zmniejszyć rozmiar aplikacji
- Wady: Interpretowany kod działa wolniej niż skompilowany kod
-
Właściwość MSBuild:
<UseInterpreter>true</UseInterpreter>
Aby uzyskać więcej informacji, zobacz Interpretery w systemach iOS i Mac Catalyst.
Interpreter CoreCLR
CoreCLR zawiera interpreter w systemach iOS i Mac Catalyst. Interpreter jest zawsze włączony i wykonuje kod, który nie jest wstępnie skompilowany, ponieważ te platformy nie zezwalają na kompilację JIT. To zachowanie jest częścią środowiska uruchomieniowego i nie wymaga właściwości interpretera MSBuild.
Obsługa kodu dynamicznego na platformach firmy Apple
W .NET 11+ aplikacje CoreCLR w systemach iOS, tvOS i Mac Catalyst domyślnie używają DynamicCodeSupport=true.
IsDynamicCodeSupported zgłasza true z tą wartością domyślną. Interpreter CoreCLR może wykonywać dynamicznie generowany kod MSIL bez kompilatora JIT. Dzięki temu biblioteki, takie jak Entity Framework Core, mogą tworzyć modele w czasie wykonywania, zamiast niepoprawnie wybierać ścieżkę kodu NativeAOT.
Pozostawienie włączonej obsługi kodu dynamicznego powoduje zachowanie System.Reflection.Emit w przyciętych danych wyjściowych i może zwiększyć rozmiar aplikacji. Wyłącz ją tylko wtedy, gdy aplikacja i jej zależności nie wymagają kodu dynamicznego:
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios' Or $([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tvos' Or $([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">
<DynamicCodeSupport>false</DynamicCodeSupport>
</PropertyGroup>
To ustawienie zmienia wykrywanie możliwości i umożliwia usunięcie obsługi kodu dynamicznego podczas przycinania. To nie eliminuje konieczności zapewnienia zgodności zależności z przycinaniem.
NativeAOT nadal domyślnie używa DynamicCodeSupport=false i nie obsługuje kodu dynamicznego.
Co .NET MAUI używa domyślnie
W poniższej tabeli przedstawiono podsumowanie strategii środowiska uruchomieniowego i kompilacji .NET MAUI używanych na każdej platformie w zależności od konfiguracji kompilacji.
| Platforma | Debug | Uwolnij |
|---|---|---|
| Android | Mono + JIT + interpreter | Mono + Mono AOT (technologia współdziałająca z Mono do optymalizacji kompilacji) |
| Ios | Mono + JIT (x64) / Mono + AOT + interpreter (ARM64) | Mono + Mono AOT (technologia współdziałająca z Mono do optymalizacji kompilacji) |
| Mac Catalyst | Mono + JIT (x64) / Mono + AOT + interpreter (ARM64) | Mono + Mono AOT (technologia współdziałająca z Mono do optymalizacji kompilacji) |
| Windows | CoreCLR + JIT | CoreCLR + JIT + ReadyToRun |
Uwaga / Notatka
Po wybraniu opcji CoreCLR w systemie Android lub iOS przez ustawienie <UseMonoRuntime>false</UseMonoRuntime> w pliku projektu kompilacje domyślnie używają funkcji ReadyToRun. W systemach iOS i Mac Catalyst z mechanizmem CoreCLR kompozytowy ReadyToRun jest włączony zarówno w kompilacjach debug, jak i release.
Napiwek
Możesz wyrazić zgodę na opcję NativeAOT w systemach iOS i Mac Catalyst, ustawiając <PublishAot>true</PublishAot> w pliku projektu. Funkcja NativeAOT działa tylko podczas publikowania.
W poniższej tabeli przedstawiono podsumowanie strategii środowiska uruchomieniowego i kompilacji używanej przez .NET MAUI na każdej platformie:
| Platforma | Debug | Uwolnij |
|---|---|---|
| Android | CoreCLR + JIT | CoreCLR + częściowy złożony ReadyToRun + JIT |
| Ios | CoreCLR + częściowy złożony ReadyToRun + interpreter | CoreCLR + pełny złożony ReadyToRun + interpreter |
| Mac Catalyst | CoreCLR + częściowy złożony ReadyToRun + interpreter | CoreCLR + pełny złożony ReadyToRun + interpreter |
| Windows | CoreCLR + JIT | CoreCLR + JIT + ReadyToRun |
Ważna
Nie ustawiaj UseMonoRuntime na true w przypadku platformy docelowej .NET 11+. Mono nie jest obsługiwane i ustawienie tej właściwości powoduje błąd kompilacji.
Napiwek
Funkcja NativeAOT jest włączana za pomocą <PublishAot>true</PublishAot> i zaczyna działać, gdy używasz dotnet publish. NativeAOT nie ma JIT ani interpretera i wymaga pełnego przycinania kodu.
Porównanie
W poniższej tabeli porównaliśmy strategie kompilacji dostępne dla aplikacji .NET MAUI:
| Strategia | JIT | Mono AOT | ReadyToRun | NativeAOT |
|---|---|---|---|---|
| Czas kompilacji | W czasie wykonywania | W czasie kompilacji | W czasie kompilacji | W czasie kompilacji |
| Szybkość uruchamiania | Najwolniejszy | Szybko | Szybko | Najszybszy |
| Szybkość stałego stanu | Najszybszy (zoptymalizowany tryb JIT) | Dobrze | Najszybsza (ponowna kompilacja warstwowa) | Dobrze |
| Rozmiar aplikacji | Najmniejszy | Większy | Większy | Najmniejszy |
| Kod dynamiczny | Pełna obsługa | Ograniczony | Pełna obsługa | Niewspierane |
| Konieczne przycinanie | Nie. | Częściowe (domyślne) | Nie. | Pełny |
| Diagnostyka | Pełny | Ograniczony | Pełny | Ograniczony |
Typowa wydajność
Poniższe testy porównawcze pochodzą z dotnet new maui aplikacji i są zależne od sprzętu. Ilustrują względne różnice w czasie wykonania i nie stanowią bezwzględnych gwarancji.
Czas uruchamiania (milisekundy):
| Runtime | Android | iOS | macOS |
|---|---|---|---|
| Mono (ustawienie domyślne) | ~642 | ~275 | ~311 |
| NativeAOT | ~274 | ~130 | ~255 |
Rozmiar aplikacji w systemie iOS (MB):
| Model wdrażania | rozmiar |
|---|---|
| Mono (ustawienie domyślne) | ~14.3 |
| Mono (pełne redukowanie) | ~11,5 |
| NativeAOT | ~5.4 |
W poniższej tabeli porównaliśmy strategie kompilacji dostępne dla aplikacji .NET MAUI przeznaczonych dla .NET 11:
| Strategia | CoreCLR JIT | Interpreter CoreCLR | ReadyToRun | NativeAOT |
|---|---|---|---|---|
| Czas kompilacji | W czasie wykonywania | W czasie wykonywania | W czasie kompilacji | W czasie kompilacji |
| Szybkość uruchamiania | Wolniej | Wolniej | Szybko | Najszybszy |
| Rozmiar aplikacji | Mniejszy | Mniejszy | Większy | Najmniejszy |
| Kod dynamiczny | Pełna obsługa | Pełna obsługa | Pełna obsługa (za pośrednictwem trybu JIT lub interpretera) | Niewspierane |
| Diagnostyka | Pełny | Pełny | Ograniczony | Ograniczony |
CoreCLR w systemach Android i iOS
Począwszy od .NET 10, możesz wyrazić zgodę na uruchamianie aplikacji systemu Android w coreCLR zamiast Mono.
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">
<UseMonoRuntime>false</UseMonoRuntime>
</PropertyGroup>
W programie .NET 10 coreCLR w systemie Android jest funkcją eksperymentalną i nie jest przeznaczona do użytku produkcyjnego.
W .NET 11+, CoreCLR jest domyślnym środowiskiem uruchomieniowym dla aplikacji Android, iOS i Mac Catalyst. NativeAOT to opcjonalna alternatywa, która nie korzysta z CoreCLR i ma charakter eksperymentalny na Androidzie. Nie ustawiaj UseMonoRuntime=true; Mono nie jest obsługiwane w przypadku .NET 11 lub nowszych, a ustawienie właściwości powoduje błąd kompilacji.
Wewnątrz pliku APK systemu Android
Zawartość pakietu APK różni się w zależności od tego, którego środowiska uruchomieniowego i strategii kompilacji używa aplikacja:
Mono:
-
classes.dex— Kod Java/Kotlin -
lib/arm64-v8a/libmonosgen-2.0.so— Środowisko uruchomieniowe mono -
lib/arm64-v8a/libmonodroid.so— klej uruchamiania środowiska uruchomieniowego specyficznego dla systemu Android -
lib/arm64-v8a/libassemblies.arm64-v8a.blob.so— Skompresowane, zapakowane zestawy MSIL -
lib/arm64-v8a/libaot-*.dll.so— Natywne obrazy AOT Mono w kompilacjach produkcyjnych
CoreCLR:
-
classes.dex— Kod Java/Kotlin -
lib/arm64-v8a/libcoreclr.so— Środowisko uruchomieniowe CoreCLR -
lib/arm64-v8a/libclrjit.so— Kompilator JIT coreCLR -
lib/arm64-v8a/libmonodroid.so— klej uruchamiania środowiska uruchomieniowego specyficznego dla systemu Android -
lib/arm64-v8a/libassemblies.arm64-v8a.so— Spakowany kod MSIL z obrazami ReadyToRun
Zawartość pliku APK systemu Android różni się w zależności od tego, czy aplikacja używa coreCLR, czy NativeAOT:
CoreCLR:
-
classes.dex— Kod Java/Kotlin -
lib/arm64-v8a/libcoreclr.so— Środowisko uruchomieniowe CoreCLR -
lib/arm64-v8a/libclrjit.so— Kompilator JIT coreCLR -
lib/arm64-v8a/libmonodroid.so— klej uruchamiania środowiska uruchomieniowego specyficznego dla systemu Android -
lib/arm64-v8a/libassembly-store.so— Spakowany kod MSIL z obrazami ReadyToRun
NativeAOT w systemie Android (eksperymentalne):
-
classes.dex— Kod Java/Kotlin -
lib/arm64-v8a/libhellomaui.so— natywna biblioteka zawierająca środowisko uruchomieniowe, kod zarządzany i klej startowy
Przycinanie
Przycinanie to krok kompilacji, który usuwa nieużywany kod z aplikacji, aby zmniejszyć jego rozmiar. Program .NET MAUI używa trymera ILLink, który analizuje kod i usuwa typy, metody i pola, do których nie ma statycznych odwołań.
W przypadku kompilacji wydaniowych CoreCLR platforma .NET MAUI domyślnie używa TrimMode=partial, co powoduje przycinanie zestawów platformy, ale nie Twojego kodu ani odwołań do pakietów NuGet. Aby użyć pełnego przycinania, ustaw TrimMode na full:
<PropertyGroup>
<TrimMode>full</TrimMode>
</PropertyGroup>
NativeAOT automatycznie przeprowadza pełne przycinanie. Nie należy ustawiać TrimMode na inny tryb przycinania podczas korzystania z NativeAOT.
Aby uzyskać więcej informacji, zobacz Przycinanie aplikacji MAUI platformy .NET.
Odwołanie do właściwości MSBuild
Poniższa tabela zawiera podsumowanie właściwości programu MSBuild, które kontrolują zachowanie środowiska uruchomieniowego i kompilacji:
| Majątek | Opis | Wartość domyślna |
|---|---|---|
PublishAot |
Włącz kompilację NativeAOT. | false |
PublishReadyToRun |
Włącz wstępną kompilację ReadyToRun dla coreCLR. |
true (wydanie systemu Windows i odpowiednie kompilacje CoreCLR) |
PublishTrimmed |
Włącz przycinanie ILLink. |
true (Wydanie) |
TrimMode |
Ustaw poziom agresywności przycinania (partial lub full). |
partial |
UseInterpreter |
Włącz interpreter Mono. |
true (Debugowanie katalizatora systemu iOS/Mac) |
UseMonoRuntime |
Użyj Mono zamiast CoreCLR. |
true na obsługiwanych platformach docelowych Mono |
W poniższej tabeli przedstawiono podsumowanie właściwości programu MSBuild związanych z zachowaniem środowiska uruchomieniowego .NET 11 i kompilacji:
| Majątek | Opis | Wartość domyślna |
|---|---|---|
PublishAot |
Włącz kompilację NativeAOT podczas dotnet publish. |
false |
DynamicCodeSupport |
Zachowaj obsługę kodu dynamicznego i raportuj to przez RuntimeFeature.IsDynamicCodeSupported. |
true dla CoreCLR w systemach iOS, tvOS i Mac Catalyst; false dla nativeAOT |
MauiEnableFullReadyToRun |
Włącz tryb Full ReadyToRun dla aplikacji CoreCLR systemu Android. | false |
PublishReadyToRun |
Włącz wstępną kompilację ReadyToRun dla coreCLR. Wymaga przycinania w systemie Android. |
true w przypadku kompilacji Release systemu Android, gdy PublishTrimmed=true |
PublishReadyToRunComposite |
Kompiluj asemblacje razem w kompozytowy obraz ReadyToRun. Wymaga przycinania w systemie Android. |
true na Androidzie gdy PublishReadyToRun=true |
PublishTrimmed |
Włącz przycinanie ILLink. Wymagane dla systemu Android ReadyToRun. |
true dla kompilacji wydaniowych Androida |
TrimMode |
Ustaw poziom agresywności przycinania dla kompilacji innych niż NativeAOT. | partial |