Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A partir do .NET 10, as System.Reflection APIs InvokeMember, FindMemberse DeclaredMembers usam anotações mais restritas em vez de DynamicallyAccessedMemberTypes.All.
Essa alteração afeta cenários em que os desenvolvedores implementam a interface IReflect ou derivam de TypeInfo. A utilização anterior de DynamicallyAccessedMemberTypes.All era excessivamente permissiva e poderia levar a comportamentos não intencionais, como a captura de métodos de interface implementados por uma classe ou a geração de avisos devido a chamadas de reflexão insegura.
Versão introduzida
.NET 10
Comportamento anterior
Anteriormente, as APIs afetadas usavam a DynamicallyAccessedMemberTypes.All anotação, que era excessivamente permissiva. Isso pode resultar na captura de membros adicionais, como métodos de interface implementados por uma classe, e potencialmente causar avisos de tempo de execução ou chamadas de reflexão inseguras.
Novo comportamento
As APIs afetadas agora usam anotações mais restritas, que fornecem melhor controle sobre os membros capturados durante a reflexão.
Tipo de mudança disruptiva
Essa alteração é uma mudança comportamental e pode afetar a compatibilidade da fonte.
Motivo da mudança
A alteração foi introduzida para melhorar a precisão das anotações em System.Reflection APIs e para resolver problemas causados pela anotação excessivamente permissiva DynamicallyAccessedMemberTypes.All . Isto garante melhor compatibilidade com cenários de recorte e reflexão, reduz avisos durante a execução e previne chamadas de reflexão inseguras.
Ação recomendada
Se você implementar IReflect ou derivar do TypeInfo, revise seu código e atualize as anotações para alinhá-lo com o novo comportamento. Specifically:
Substitua DynamicallyAccessedMemberTypes.All anotações por anotações mais restritas, como DynamicallyAccessedMemberTypes.PublicMethods, DynamicallyAccessedMemberTypes.NonPublicMethodsou outros tipos apropriados.
O trecho de código a seguir mostra um exemplo.
class MyType : IReflect { [DynamicallyAccessedMembers( DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties | DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)] public object InvokeMember(string name, BindingFlags invokeAttr, Binder? binder, object? target, object?[]? args, ParameterModifier[]? modifiers, CultureInfo? culture, string[]? namedParameters) { } }Testar cenários de reflexão para garantir que as anotações atualizadas captam os membros pretendidos e não introduzem erros ou avisos em tempo de execução.
Para mais informações sobre DynamicallyAccessedMembers anotações e o seu uso, consulte Preparar bibliotecas .NET para otimização.