Compartilhar via


Emitindo atributos de segurança declarativos

Emitir atributos de segurança declarativos para assemblies dinâmicos e para seus tipos e métodos equivale funcionalmente à codificação de .permission e .permissionset declarações para o Assembler MSIL (Ilasm.exe), ou para aplicar a PermissionSetAttribute atributo no código-fonte para o Visual Basic, translation from VPE for Csharp ou C++. No entanto, existem diferenças entre o formato de metadados usado para atributos de armazenamento emitido e o formato usado para armazenar atributos compilados, dependendo da versão do .NET estrutura.

Formatos de metadados para a segurança declarativa

Foi introduzido um novo formato de metadados para armazenar atributos de segurança declarativa nas revisões de 2005 para a ECMA padrão, juntamente com o formato XML original.Para obter detalhes, consulte a descrição do PermissionSet blob na DeclSecurity tabela (seção 22.11 as revisões de 2005) na documentação do ECMA partição II. Partição II documentação está disponível online em https://msdn.Microsoft.com/net/ECMA/ and http://www.ECMA-International.org/publications/standards/Ecma-335.htm.

Em todas as versões do .NET estrutura, emissão de segurança declarativa aplicada usando a reflexão é armazenado no formato de metadados antigos.

Permissões de segurança declarativa no código compilado usando o Assembler MSIL (Ilasm.exe) e os compiladores de linguagem no .NET estrutura versão 2.0 são armazenados no novo formato.

Permissões de segurança declarativa no código compilado usando o Assembler MSIL (Ilasm.exe) e os compiladores de linguagem do .NET estrutura versões 1.0 e 1.1 são armazenados no formato antigo.

Emitindo atributos de segurança declarativos

Atributos de segurança declarativa podem ser emitidos para assemblies, tipos, métodos e construtores.Para todos os outros tipos de membro, a segurança declarativa é emitida para os métodos subjacentes.

Observação importante:

Não é possível emitir atributos de segurança declarativa, criando PermissionSetAttribute objetos e aplicá-las para o assembly dinâmico, tipo ou método pela usando o SetCustomAttribute método.

  • Emitir segurança declarativa para um assembly dinâmico, criar separar PermissionSet objetos que contêm as permissões recusadas necessários e opcionais. Passar esses conjuntos de permissões para a sobrecarga apropriada do DefineDynamicAssembly método. Se não houver nenhuma permissão para aplicar para uma categoria, especificar null Esse parâmetro.

    Observação importante:

    O obrigatória, opcional e recusadas permissões são não usado a menos que o assembly dinâmico foi salvo e recarregado na memória , ou a menos que você use uma sobrecarga da DefineDynamicAssembly método especifica evidência sistema autônomo solicitado bem sistema autônomo permissões e fonte de um Evidence objeto. Para obter mais informações, consulte DefineDynamicAssembly.

  • Emitir segurança declarativa para tipos, métodos e construtores em um assembly dinâmico, criam um PermissionSet objeto que contém as permissões para cada SecurityAction você deseja aplicar. Aplique as permissões usando o AddDeclarativeSecurity método de TypeBuilder para tipos, o AddDeclarativeSecurity método de ConstructorBuilder para construtores e o AddDeclarativeSecurity de MethodBuilder para métodos.

    Observação:

    Segurança declarativa não tem suporte para métodos dinâmicos definidos usando o DynamicMethod classe.

  • Emitir segurança declarativa para todas as propriedades e eventos, aplicar os conjuntos de permissão desejado para ao método subjacente ou usando o AddDeclarativeSecurity método de MethodBuilder. Por exemplo, para emitir a segurança declarativa para uma propriedade, aplicar a segurança declarativa da propriedade get e set métodos acessadores.

Durante o desenvolvimento de código que emite assemblies dinâmicos, é recomendável que você use uma sobrecarga do DefineDynamicAssembly método especifica evidências e permissões, fornecer a evidência que você deseja que o assembly dinâmico e incluir SecurityPermissionFlag.SkipVerification em refusedPermissions. Recusando SkipVerification garante que o MSIL é verificado. Uma limitação dessa técnica é que ele também faz com que SecurityException para ser lançada quando usado com o código que exige confiança total.

Consulte também

Referência

DefineDynamicAssembly

ConstructorBuilder

TypeBuilder

MethodBuilder

PermissionSet