Compartilhar via


Emitindo atributos de segurança declarativos

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

Formatos de metadados para a segurança declarativa

Um novo formato de metadados para armazenar os atributos de segurança declarativa foi introduzido nas revisões de 2005 para a ECMA standard, além de formato XML original. Para obter detalhes, consulte a descrição da PermissionSet irregular na DeclSecurity (seção 22.11 nas revisões de 2005) (em inglês) da tabela na documentação do ECMA II de partição. A documentação está disponível on-line; consulte C# do ECMA e padrões comuns de infra-estrutura de linguagem no MSDN e padrão ECMA-335 - Common Language Infrastructure (CLI) no site Ecma International.

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

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

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

Emitindo atributos de segurança declarativos

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

Observação importanteImportante

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

  • Para emitir a segurança declarativa para um assembly dinâmico, criar separada PermissionSet objetos que contêm as permissões que são obrigatórios, opcionais e recusadas. Esses conjuntos de permissão de passar para a sobrecarga apropriada da DefineDynamicAssembly método. Se não houver nenhuma permissão para solicitar uma categoria, especifique null para o parâmetro.

    Observação

    As permissões recusadas obrigatórios e opcionais não são usadas, a menos que o assembly dinâmico foi salvo e recarregado na memória ou a menos que você use uma sobrecarga de DefineDynamicAssembly método Especifica evidências como solicitado bem como permissões e a fonte de um Evidence objeto.Para obter mais informações, consulte DefineDynamicAssembly.

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

    Observação

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

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

Durante o desenvolvimento de código que emite os assemblies dinâmicos, é recomendável que você use uma sobrecarga de DefineDynamicAssembly método que especifica as evidências e permissões, fornecer a evidência que você deseja que o assembly dinâmico, e incluem SecurityPermissionFlag.SkipVerification na 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 as demandas de total confiança.

Consulte também

Referência

DefineDynamicAssembly

ConstructorBuilder

TypeBuilder

MethodBuilder

PermissionSet