Бөлісу құралы:


IL3050: избегайте вызова элементов, аннотированных с параметром "RequiresDynamicCodeAttribute" при публикации как Native AOT

Причина

При публикации приложения с использованием Native AOT (задав PublishAot свойство true в проекте), вызывающие члены, аннотированные с атрибутом RequiresDynamicCodeAttribute, могут вызвать исключения во время выполнения. Члены, аннотированные с этим атрибутом, могут потребовать возможности динамического создания нового кода во время выполнения, а модель публикации Native 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.