Compartilhar via


DynamicMethod.IsSecurityCritical Propriedade

Definição

Obtém um valor que indica se o método dinâmico atual é crítico para segurança ou crítico para segurança e disponível no código transparente e, portanto, pode executar operações críticas.

public:
 virtual property bool IsSecurityCritical { bool get(); };
public override bool IsSecurityCritical { get; }
member this.IsSecurityCritical : bool
Public Overrides ReadOnly Property IsSecurityCritical As Boolean

Valor da propriedade

true se o método dinâmico atual for crítico de segurança ou de segurança crítica; false se for transparente.

Exceções

O método dinâmico não tem um corpo de método.

Comentários

As IsSecurityCriticalpropriedades , IsSecuritySafeCriticale IsSecurityTransparent relatam o nível de transparência do método dinâmico, conforme determinado pelo CLR (Common Language Runtime). As combinações destas propriedades são mostradas na seguinte tabela:

Nível de segurança IsSecurityCritical IsSecuritySafeCritical IsSecurityTransparent
Crítico true false false
Segurança crítica true true false
Transparente false false true

Usar essas propriedade é muito mais simples que examinar as anotações de segurança de um assembly e seus tipos, verificando o nível de confiança atual e tentando duplicar as regras do runtime.

A transparência de um método dinâmico depende do módulo ao qual ele está associado. Se o método dinâmico estiver associado a um tipo em vez de um módulo, sua transparência dependerá do módulo que contém o tipo. Os métodos dinâmicos não têm anotações de segurança, portanto, recebem a transparência padrão para o módulo associado.

  • Métodos dinâmicos hospedados anonimamente são sempre transparentes, pois o módulo fornecido pelo sistema que os contém é transparente.

  • A transparência de um método dinâmico associado a um assembly confiável (ou seja, um assembly de nome forte instalado no cache de assembly global) é descrita na tabela a seguir.

    Anotação de assembly Transparência de nível 1 Transparência de nível 2
    Totalmente transparente Transparente Transparente
    Totalmente crítico Crítico Crítico
    Transparência mista Transparente Transparente
    Independente de segurança Crítico para segurança Crítico

    Por exemplo, se você associar um método dinâmico a um tipo que está em mscorlib.dll, que tem nível 2 de transparência mista, o método dinâmico é transparente e não pode executar código crítico. Para obter informações sobre níveis de transparência, consulte Código Transparente de Segurança, Nível 1 e Código Transparente de Segurança, Nível 2.

    Observação

    Associar um método dinâmico a um módulo em um assembly de nível 1 confiável que seja independente de segurança, como System.dll, não permite elevação de confiança. Se o conjunto de concessões do código que chama o método dinâmico não incluir o conjunto de concessão de System.dll (ou seja, confiança total), SecurityException será gerado quando o método dinâmico for chamado.

  • A transparência de um método dinâmico associado a um assembly parcialmente confiável depende de como o assembly é carregado. Se o assembly for carregado com confiança parcial (por exemplo, em um domínio de aplicativo em área restrita), o runtime ignorará as anotações de segurança do assembly. O assembly e todos os seus tipos e membros, incluindo métodos dinâmicos, são tratados como transparentes. O runtime prestará atenção às anotações de segurança somente se o assembly de confiança parcial for carregado com confiança total (por exemplo, no domínio de aplicativo padrão de um aplicativo da área de trabalho). Nesse caso, o runtime atribui ao método dinâmico a transparência padrão para métodos de acordo com as anotações do assembly.

Para obter mais informações sobre emissão de reflexão e transparência, consulte Problemas de segurança na emissão de reflexão. Para obter informações sobre transparência, consulte Alterações de segurança.

Aplica-se a

Confira também