Compartilhar via


IL3050: evite chamar membros anotados com 'RequiresDynamicCodeAttribute' ao publicar como AOT nativo

Causa

Quando você publica um aplicativo como AOT nativo (definindo a propriedade PublishAot como true em um projeto), chamar membros anotados com o atributo RequiresDynamicCodeAttribute pode resultar em exceções em tempo de execução. Os membros anotados com esse atributo podem exigir a capacidade de criar dinamicamente um novo código em tempo de execução, e o modelo de publicação AOT Nativo não fornece uma maneira de gerar código nativo em tempo de execução.

Descrição da regra

RequiresDynamicCodeAttribute indica que o membro referencia código que pode exigir a geração de código em tempo de execução.

Exemplo

// 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 { }

Como corrigir violações

Os membros anotados com o atributo RequiresDynamicCodeAttribute têm uma mensagem que fornece informações úteis aos usuários que estão publicando como AOT nativo. Considere adaptar o código existente à mensagem do atributo ou remover a chamada com violação.

Algumas APIs anotadas com RequiresDynamicCodeAttribute não disparam um aviso quando chamadas em um padrão específico. Para obter mais informações, consulte APIs intrínsecas marcadas como RequiresDynamicCode.