.NET para o erro XA1044 do Android

Mensagens de exemplo

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.

A condição sugerida por essa mensagem só é apropriada para destinos que dão suporte a Mono. No .NET 11, $(UseMonoRuntime)=true é rejeitado com NETSDK1242; remova a propriedade exclusiva do Mono.

Issue

Esse erro indica que uma propriedade msbuild específica do Mono está definida no arquivo de projeto, mas o projeto está configurado para usar um runtime não Mono, como CoreCLR ou NativeAOT. Quando a propriedade é true, o build a redefine para false para que ela não seja passada para etapas de build não Mono e, em seguida, é interrompida com XA1044. Isto não é um aviso nem uma operação sem efeito silenciosa.

Para aplicativos CoreCLR, a configuração RunAOTCompilation para false também produz esse erro. Ele não desabilita a compilação ReadyToRun. Defini-lo como false para NativeAOT não produz esse erro.

As propriedades que disparam esse erro incluem:

  • RunAOTCompilation — Habilita a compilação do Mono AOT.
  • EnableLLVM — Habilita LLVM para o compilador AOT Mono.

Solução

Remova a propriedade específica do Mono do seu arquivo de projeto ou Directory.Build.props. Mantenha-o somente em arquivos de projeto ou em condições aplicáveis exclusivamente a destinos Mono com suporte no .NET 10 e anteriores.

ReadyToRun e NativeAOT são modelos de compilação separados. Elas não são equivalentes diretas às configurações do Mono AOT.

A partir do .NET 11, para desabilitar a compilação AOT do ReadyToRun (R2R) para aplicativos CoreCLR, remova RunAOTCompilation e defina PublishReadyToRun até false:

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