DynamicMethod.IsSecurityTransparent Propriedade

Definição

Obtém um valor que indica que se o método dinâmico atual é transparente no nível de confiança atual e, portanto, não é pode realizar operações críticas.

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

Valor da propriedade

Boolean

true se o método dinâmico for transparente de segurança no nível de confiança atual; caso contrário, false.

Exceções

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

Comentários

As IsSecurityCriticalpropriedades e IsSecurityTransparent propriedades IsSecuritySafeCriticalrelatam 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.

  • Os 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
    Agnóstico 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 transparência misturada de nível 2, 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 a 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ões 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 em Emissão de Reflexão. Para obter informações sobre transparência, consulte Alterações de segurança.

Aplica-se a

Confira também