Partilhar via


IL3058: A assemblia referenciada não está anotada para compatibilidade com AOT

Motivo

Um projeto tem <VerifyReferenceAotCompatibility>true</VerifyReferenceAotCompatibility> definido, e uma ou mais assemblies referenciadas não têm o atributo de metadados IsAotCompatible definido como true.

Descrição da regra

Quando publicar com AOT nativo usando <PublishAot>true</PublishAot> ou marcar o seu projeto como compatível com AOT usando <IsAotCompatible>true</IsAotCompatible>, pode opcionalmente ativar a verificação de que todos os conjuntos referenciados também estão anotados para compatibilidade com AOT. Isto ajuda a garantir que todas as dependências do seu projeto são anotadas para compatibilidade com AOT.

Para permitir esta verificação, defina a VerifyReferenceAotCompatibility propriedade para true no ficheiro do seu projeto:

<PropertyGroup>
  <PublishAot>true</PublishAot>
  <VerifyReferenceAotCompatibility>true</VerifyReferenceAotCompatibility>
</PropertyGroup>

Quando esta propriedade está ativada, o analisador verifica se todas as montagens referenciadas foram construídas com <IsAotCompatible>true</IsAotCompatible>, o que adiciona o atributo [assembly: AssemblyMetadata("IsAotCompatible", "True")] ao nível de montagem ao conjunto.

Example

// Assembly reference: MyLibrary.dll (built without <IsAotCompatible>true</IsAotCompatible>)

public class Program
{
    public static void Main()
    {
        var obj = new MyLibrary.SomeClass();
    }
}
warning IL3058: Referenced assembly 'MyLibrary' is not built with `<IsAotCompatible>true</IsAotCompatible>` and may not be compatible with AOT.

Como corrigir violações

Tem várias opções para corrigir este aviso:

  • Se controlar o código-fonte da biblioteca, atualize a biblioteca referenciada para ser construída com <IsAotCompatible>true</IsAotCompatible>. Esta IsAotCompatible propriedade marca o assembly como compatível com Native AOT e permite uma análise específica do AOT. Esta é a abordagem preferida.
  • Se tiveres confiança de que a biblioteca funciona corretamente com o AOT nativo mesmo sem o atributo, desativa a verificação ao definir <VerifyReferenceAotCompatibility>false</VerifyReferenceAotCompatibility> o ficheiro do teu projeto.

Consulte também