Поделиться через


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.