Udostępnij za pośrednictwem


IL3050: Unikaj wywoływania elementów członkowskich z adnotacjami "RequiresDynamicCodeAttribute" podczas publikowania jako natywna funkcja AOT

Przyczyna

W przypadku publikowania aplikacji jako natywnej AOT (przez ustawienie PublishAot właściwości na true wartość w projekcie) wywoływanie elementów członkowskich z adnotacjami z atrybutem RequiresDynamicCodeAttribute może spowodować wyjątki w czasie wykonywania. Elementy członkowskie z adnotacjami o tym atrybucie mogą wymagać dynamicznego tworzenia nowego kodu w czasie wykonywania, a natywny model publikowania AOT nie zapewnia sposobu generowania kodu natywnego w czasie wykonywania.

Opis reguły

RequiresDynamicCodeAttribute wskazuje, że element członkowski odwołuje się do kodu, który może wymagać generowania kodu w czasie wykonywania.

Przykład

// AOT analysis warning IL3050: Program.<Main>$(String[]): Using member 'System.Type.MakeGenericType(Type[])'
// which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling. The native code for
// this instantiation might not be available at runtime.
typeof(Generic<>).MakeGenericType(unknownType);

class Generic<T> { }

struct SomeStruct { }

Jak naprawić naruszenia

Elementy członkowskie oznaczone atrybutem RequiresDynamicCodeAttribute zawierają komunikat zawierający przydatne informacje dla użytkowników, którzy publikują jako natywną funkcję AOT. Rozważ dostosowanie istniejącego kodu do komunikatu atrybutu lub usunięcie wywołania naruszającego.

Niektóre interfejsy API z adnotacjami RequiresDynamicCodeAttribute nie wyzwalają ostrzeżenia w przypadku wywołania w określonym wzorcu. Aby uzyskać więcej informacji, zobacz Wewnętrzne interfejsy API oznaczone WymagaDynamicCode.