.NET för Android-fel XA1044

Exempelmeddelanden

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.

Villkoret som föreslås i det här meddelandet är endast lämpligt för mål som stöder Mono. I .NET 11 $(UseMonoRuntime)=true avvisas med NETSDK1242. Ta bort egenskapen Endast mono i stället.

Problematik

Det här felet anger att en monospecifik MSBuild-egenskap anges i projektfilen, men projektet är konfigurerat för att använda en icke-mono-körning, till exempel CoreCLR eller NativeAOT. När egenskapen är true återställer byggprocessen den till false så att den inte skickas till byggsteg som inte är Mono, och stoppas sedan med XA1044. Det här är inte en varning eller en tyst no-op.

För CoreCLR-program ger också inställningen av RunAOTCompilation till false det här felet. Den inaktiverar inte ReadyToRun-kompilering. Att ställa in det på false för NativeAOT genererar inte det här felet.

Egenskaper som utlöser det här felet är:

  • RunAOTCompilation — Aktiverar Mono AOT-kompilering.
  • EnableLLVM — Aktiverar LLVM för Mono AOT-kompilatorn.

Lösning

Ta bort den Mono-specifika egenskapen från projektfilen eller Directory.Build.props. Behåll den endast i projektfiler eller villkor som endast gäller för Mono-mål som stöds i .NET 10 och tidigare.

ReadyToRun och NativeAOT är separata kompileringsmodeller. De är inte direkta motsvarigheter till Mono AOT-inställningar.

Från och med .NET 11, för att inaktivera ReadyToRun (R2R) AOT-kompilering för CoreCLR-program, ta bort RunAOTCompilation och ange följande PublishReadyToRun till false i stället:

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