Android için .NET hatası XA1044

Örnek iletiler

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.

Bu ileti tarafından önerilen koşul yalnızca Mono destekleyen hedefler için uygundur. .NET 11'de $(UseMonoRuntime)=true ile reddedilir; bunun yerine yalnızca Mono’ya özgü özelliği kaldırın.

Issue

Bu hata, proje dosyasında Mono'ya özgü bir MSBuild özelliğinin ayarlandığını, ancak projenin CoreCLR veya NativeAOT gibi Mono olmayan bir çalışma zamanı kullanacak şekilde yapılandırıldığını gösterir. Özellik true olduğunda derleme, Mono olmayan derleme adımlarına geçirilmemesi için bunu false olarak sıfırlar, ardından XA1044 ile durur. Bu ne bir uyarıdır ne de sessiz bir no-op'tur.

CoreCLR uygulamaları için false değerini RunAOTCompilation olarak ayarlamak da bu hatayı üretir. ReadyToRun derlemesini devre dışı bırakmaz. Bunu NativeAOT için false olarak ayarlamak bu hatayı üretmez.

Bu hatayı tetikleyen özellikler şunlardır:

  • RunAOTCompilation — Mono AOT derlemesini etkinleştirir.
  • EnableLLVM — Mono AOT derleyicisi için LLVM'yi etkinleştirir.

Çözüm

Mono'ya özel özelliği proje dosyanızdan veya Directory.Build.props kaldırın. Bunu yalnızca desteklenen .NET 10 ve önceki Mono hedefleri için geçerli olan proje dosyalarında veya koşullarda bulundurun.

ReadyToRun ve NativeAOT ayrı derleme modelleridir. Mono AOT ayarlarının bire bir karşılığı değildir.

.NET 11'den başlayarak, CoreCLR uygulamaları için ReadyToRun (R2R) AOT derlemesini devre dışı bırakmak için kaldırın RunAOTCompilation ve ayarlayın false yerine PublishReadyToRun:

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