IL3050: избегайте вызова элементов, аннотированных с параметром "RequiresDynamicCodeAttribute" при публикации как Native AOT
Причина
При публикации приложения в качестве собственного AOT (задав PublishAot
свойство true
в проекте), вызывающие элементы, аннотированные с RequiresDynamicCodeAttribute
атрибутом, могут привести к исключениям во время выполнения. Члены, аннотированные с этим атрибутом, могут потребовать возможности динамического создания нового кода во время выполнения, а модель публикации Машинного обучения AOT не предоставляет способ создания машинного кода во время выполнения.
Описание правила
RequiresDynamicCodeAttribute указывает, что код-член ссылается на код, который может потребовать создания кода во время выполнения.
Пример
// 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 { }
Устранение нарушений
Члены, помеченные атрибутом, RequiresDynamicCodeAttribute
имеют сообщение, которое предоставляет полезную информацию пользователям, которые публикуются как Native AOT. Попробуйте привести текущий код в соответствие с сообщением атрибута или удалить нарушающий вызов.
Некоторые API-интерфейсы, аннотированные с RequiresDynamicCodeAttribute
предупреждением, не активируются при вызове в определенном шаблоне. Дополнительные сведения см. в разделе Встроенные API, помеченные как RequiresDynamicCode.