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.