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.