Compartilhar via


IL3058: O assembly referenciado não é anotado para compatibilidade de AOT

Motivo

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

Descrição da regra

Ao publicar com o AOT Nativo usando <PublishAot>true</PublishAot> ou marcar seu projeto como compatível com <IsAotCompatible>true</IsAotCompatible>AOT, você pode opcionalmente habilitar a verificação de que todos os assemblies referenciados também são anotados para compatibilidade de AOT. Isso ajuda a garantir que todas as dependências do projeto sejam anotadas para compatibilidade com AOT.

Para habilitar essa verificação, defina a VerifyReferenceAotCompatibility propriedade true no arquivo de projeto:

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

Quando essa propriedade está habilitada, o analisador verifica se todos os assemblies referenciados foram criados com <IsAotCompatible>true</IsAotCompatible>, o que adiciona o atributo [assembly: AssemblyMetadata("IsAotCompatible", "True")] ao nível do assembly.

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

Você tem várias opções para corrigir este aviso:

  • Se você controlar o código-fonte da biblioteca, atualize a biblioteca referenciada para ser construída com <IsAotCompatible>true</IsAotCompatible>. A IsAotCompatible propriedade marca o assembly como compatível com o AOT Nativo e habilita a análise específica do AOT. Essa é a abordagem preferencial.
  • Se você estiver confiante de que a biblioteca funciona corretamente com a AOT nativa mesmo sem o atributo, desabilite a verificação definindo <VerifyReferenceAotCompatibility>false</VerifyReferenceAotCompatibility> no arquivo de projeto.

Consulte também