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.