Błąd XA1044 w platformie .NET dla systemu Android

Przykładowe komunikaty

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.

Warunek wskazywany przez ten komunikat jest odpowiedni wyłącznie dla obiektów docelowych, które obsługują Mono. W .NET 11 $(UseMonoRuntime)=true zostanie odrzucony z NETSDK1242; zamiast tego usuń właściwość Tylko mono.

Issue

Ten błąd wskazuje, że właściwość MSBuild specyficzna dla mono jest ustawiona w pliku projektu, ale projekt jest skonfigurowany do używania środowiska uruchomieniowego innego niż Mono, takiego jak CoreCLR lub NativeAOT. Gdy właściwość ma wartość true, kompilacja resetuje ją do false, aby nie została przekazana do kroków kompilacji innych niż Mono, a następnie zatrzymuje się z XA1044. Nie jest to ostrzeżenie ani dyskretne no-op.

W przypadku aplikacji CoreCLR ustawienie RunAOTCompilation na false również powoduje ten błąd. Nie wyłącza kompilacji ReadyToRun. Ustawienie tej wartości na false dla NativeAOT nie powoduje wystąpienia tego błędu.

Właściwości wyzwalające ten błąd obejmują:

  • RunAOTCompilation — włącza kompilację mono AOT.
  • EnableLLVM — Włącza obsługę LLVM dla kompilatora Mono AOT.

Rozwiązanie

Usuń właściwość specyficzną dla Mono z pliku projektu lub Directory.Build.props. Zachowaj go tylko w plikach lub warunkach projektu, które mają zastosowanie wyłącznie do obsługiwanych .NET 10 i wcześniejszych elementów docelowych Mono.

ReadyToRun i NativeAOT to oddzielne modele kompilacji. Nie są one odpowiednikami jeden do jednego dla ustawień Mono AOT.

Począwszy od .NET 11, aby wyłączyć kompilację AOT ReadyToRun (R2R) dla aplikacji CoreCLR, usuń RunAOTCompilation i ustaw PublishReadyToRun do false zamiast tego:

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