Sdílet prostřednictvím


IL3058: Odkazované sestavení není opatřeno poznámkami kvůli kompatibilitě AOT

Příčina

Projekt má <VerifyReferenceAotCompatibility>true</VerifyReferenceAotCompatibility> nastavení a jedno nebo více odkazovaných sestavení nemá IsAotCompatible atribut metadat sestavení nastavený na true.

Popis pravidla

Když publikujete s nativním AOT pomocí <PublishAot>true</PublishAot> nebo označíte projekt jako AOT kompatibilní s <IsAotCompatible>true</IsAotCompatible>, můžete volitelně povolit ověření toho, že všechna odkazovaná sestavení jsou také opatřena poznámkami pro AOT kompatibilitu. To pomáhá zajistit, aby všechny závislosti v projektu byly opatřeny poznámkami kvůli kompatibilitě AOT.

Pokud chcete toto ověření povolit, nastavte VerifyReferenceAotCompatibility vlastnost do true souboru projektu:

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

Pokud je tato vlastnost povolena, analyzátor zkontroluje, zda všechna odkazovaná sestavení byla sestavena pomocí <IsAotCompatible>true</IsAotCompatible>, což přidává atribut [assembly: AssemblyMetadata("IsAotCompatible", "True")] na úrovni sestavení.

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.

Jak opravit porušení

Toto upozornění můžete opravit několika způsoby:

  • Pokud řídíte zdrojový kód knihovny, aktualizujte odkazovanou knihovnu tak, aby byla sestavena pomocí <IsAotCompatible>true</IsAotCompatible>. Vlastnost IsAotCompatible označuje sestavení jako kompatibilní s nativní AOT a umožňuje analýzu specifickou pro AOT. Toto je upřednostňovaný přístup.
  • Pokud máte jistotu, že knihovna funguje správně s nativní AOT i bez atributu, zakažte ověření nastavením <VerifyReferenceAotCompatibility>false</VerifyReferenceAotCompatibility> v souboru projektu.

Viz také