.NET pro Android – chyba XA1044

Ukázkové zprávy

error XA1044: The MSBuild property 'RunAOTCompilation' is not compatible with the CoreCLR runtime. The build cannot continue while this property is enabled. Either remove the property or guard it with a condition: Condition="'$(UseMonoRuntime)' == 'true'"
error XA1044: The MSBuild property 'RunAOTCompilation' is not compatible with the CoreCLR runtime. The build cannot continue while this property is set to 'false'. Remove the property. Starting with .NET 11, set 'PublishReadyToRun' to 'false' to disable ReadyToRun (R2R) AOT compilation.

Podmínka navržená touto zprávou je vhodná pouze pro cíle, které podporují Mono. V .NET 11 $(UseMonoRuntime)=true je odmítnut s NETSDK1242; odeberte místo toho vlastnost Mono-only.

Problém

Tato chyba značí, že v souboru projektu je nastavena vlastnost MSBuild specifická pro mono, ale projekt je nakonfigurovaný tak, aby používal jiný modul runtime než Mono, například CoreCLR nebo NativeAOT. Pokud má tato vlastnost hodnotu true, sestavení ji resetuje na false, aby se nepředávala do kroků sestavení jiných než Mono, a pak se zastaví s XA1044. Toto není varování ani tichá nečinnost.

U aplikací CoreCLR nastavení RunAOTCompilation na false také způsobí tuto chybu. Nedeaktivuje kompilaci ReadyToRun. Nastavení na false pro NativeAOT tuto chybu nevytvoří.

Mezi vlastnosti, které aktivují tuto chybu, patří:

  • RunAOTCompilation — Umožňuje kompilaci Mono AOT.
  • EnableLLVM — Povolí LLVM pro kompilátor Mono AOT.

Řešení

Odeberte vlastnost specifickou pro Mono ze souboru projektu nebo z Directory.Build.props. Ponechte ho pouze v souborech projektu nebo v podmínkách, které se vztahují výhradně na podporované cílové platformy Mono ve verzi .NET 10 a starší.

ReadyToRun a NativeAOT jsou samostatné modely kompilace. Nejsou přímou náhradou nastavení Mono AOT v poměru 1:1.

Počínaje rozhraním .NET 11 zakažte kompilaci AOT ReadyToRun (R2R) pro aplikace CoreCLR, odeberte RunAOTCompilation a nastavtena false místo toho:

<PropertyGroup>
  <PublishReadyToRun>false</PublishReadyToRun>
</PropertyGroup>