Udostępnij przez


IL3058: Odwoływany zestaw nie jest oznakowany dla zgodności z AOT

Przyczyna

Projekt został <VerifyReferenceAotCompatibility>true</VerifyReferenceAotCompatibility> ustawiony, a co najmniej jeden z odwoływanych zestawów nie ma atrybutu metadanych zestawu ustawionego na IsAotCompatibletrue.

Opis reguły

Podczas publikowania z użyciem Native AOT przy użyciu <PublishAot>true</PublishAot> lub oznaczania projektu jako zgodnego z AOT za pomocą <IsAotCompatible>true</IsAotCompatible>, można opcjonalnie włączyć weryfikację, że wszystkie przywoływane zestawy są również oznaczone jako zgodne z AOT. Dzięki temu wszystkie zależności w projekcie są adnotowane dla zgodności z AOT.

Aby włączyć tę weryfikację VerifyReferenceAotCompatibility , ustaw właściwość na true w pliku projektu:

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

Po włączeniu tej właściwości analizator sprawdza, czy wszystkie przywołane zestawy zostały skompilowane z użyciem <IsAotCompatible>true</IsAotCompatible>, co powoduje dodanie atrybutu [assembly: AssemblyMetadata("IsAotCompatible", "True")] dla zestawu.

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 naprawić naruszenia

Istnieje kilka opcji rozwiązania tego ostrzeżenia:

  • Jeśli kontrolujesz kod źródłowy biblioteki, zaktualizuj przywołyną bibliotekę do skompilowania za pomocą polecenia <IsAotCompatible>true</IsAotCompatible>. Właściwość IsAotCompatible oznacza zestaw jako zgodny z Natywnym AOT i włącza analizę specyficzną dla AOT. Jest to preferowane podejście.
  • Jeśli masz pewność, że biblioteka działa poprawnie z natywną funkcją AOT nawet bez atrybutu, wyłącz weryfikację , ustawiając wartość <VerifyReferenceAotCompatibility>false</VerifyReferenceAotCompatibility> w pliku projektu.

Zobacz także