Sdílet prostřednictvím


IL3050: Vyhněte se volání členů anotovaných pomocí "RequiresDynamicCodeAttribute" při publikování jako nativní AOT

Příčina

Když publikujete aplikaci jako nativní AOT (nastavením PublishAot vlastnosti v true projektu), volání členů anotovaných atributem RequiresDynamicCodeAttribute může vést k výjimkám za běhu. Členové s poznámkami s tímto atributem můžou vyžadovat možnost dynamicky vytvářet nový kód za běhu a nativní model publikování AOT neposkytuje způsob generování nativního kódu za běhu.

Popis pravidla

RequiresDynamicCodeAttribute označuje, že člen odkazuje na kód, který může vyžadovat generování kódu za běhu.

Příklad

// 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 opravit porušení

Členové s poznámkami s atributem RequiresDynamicCodeAttribute mají zprávu, která poskytuje užitečné informace uživatelům, kteří publikují jako nativní AOT. Zvažte přizpůsobení existujícího kódu ke zprávě atributu nebo odebrání porušení volání.

Některá rozhraní API označená poznámkami RequiresDynamicCodeAttribute neaktivují upozornění při zavolání v určitém vzoru. Další informace najdete v tématu Vnitřní rozhraní API označená jako RequiresDynamicCode.