.NET for Android XA1044 hiba

Példaüzenetek

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.

Az üzenet által javasolt feltétel csak a Mono-t támogató célokhoz megfelelő. A .NET 11 a(z) $(UseMonoRuntime)=true elemet NETSDK1242 hibakóddal elutasítja; helyette távolítsa el a csak a Monóra vonatkozó tulajdonságot.

Issue

Ez a hiba azt jelzi, hogy egy monospecifikus MSBuild tulajdonság van beállítva a projektfájlban, de a projekt úgy van konfigurálva, hogy nem mono-futtatókörnyezetet használjon, például CoreCLR vagy NativeAOT. Ha a tulajdonság értéke true, a build false értékre állítja vissza, hogy ne legyen átadva a nem-Mono buildelési lépéseknek, majd XA1044-gyel leáll. Ez nem figyelmeztetés vagy csendes no-op.

A CoreCLR-alkalmazások esetében a RunAOTCompilationfalse értékre állítása szintén ezt a hibát eredményezi. Nem tiltja le a ReadyToRun fordítást. A NativeAOT-ra való false beállítás nem eredményezi ezt a hibát.

A hibát kiváltó tulajdonságok a következők:

  • RunAOTCompilation — Engedélyezi a Mono AOT fordítását.
  • EnableLLVM — Engedélyezi az LLVM-et a Mono AOT-fordítóhoz.

Megoldás

Távolítsa el a Mono-specifikus tulajdonságot a projektfájljából vagy a(z) Directory.Build.props fájlból. Csak olyan projektfájlokban vagy feltételekben őrizze meg, amelyek kizárólag a támogatott .NET 10 és korábbi Mono-célokra vonatkoznak.

A ReadyToRun és a NativeAOT különálló fordítási modellek. Nem a Mono AOT-beállítások egy az egyben megfelelői.

A .NET 11-től kezdve a ReadyToRun (R2R) AOT-fordítás letiltásához a CoreCLR-alkalmazások esetében távolítsa el a RunAOTCompilation elemet, és állítsa a következőre PublishReadyToRun helyett false:-ra/-re

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