Configurações da política da diretiva de runtime
As configurações de política de diretiva de runtime para .NET Nativo determinam a disponibilidade de metadados para tipos e membros de tipo em runtime. Sem os metadados necessários, operações que dependem de reflexão, serialização, desserialização ou marshaling dos tipos de .NET Framework para COM ou o Windows Runtime podem falhar e gerar uma exceção. As exceções mais comuns são MissingMetadataException e (no caso de interoperabilidade) MissingInteropDataException.
Configurações de política de runtime são controladas pelo arquivo de diretivas de runtime (.rd.xml). Cada diretiva de runtime define a política para um elemento de programa específico, como um assembly (o elemento Assembly>), um tipo (o <elemento Type>) ou um método (o< elemento Method>).< A diretiva inclui um ou mais atributos que definem os tipos de política de reflexão, os tipos de política de serialização e os tipos de política de interoperabilidade discutidos na próxima seção. O valor do atributo define a configuração de política.
Tipos de política
Arquivos de diretivas de runtime reconhecem três categorias de tipos de política: reflexão, serialização e interoperabilidade.
Tipos de política de reflexão determinam quais metadados são disponibilizados no tempo de execução para reflexão:
O
Activate
controla o acesso de runtime a construtores para habilitar a ativação de instâncias.O
Browse
controla as consultas para obter informações sobre elementos de programa.O
Dynamic
controla o acesso de runtime a todos os tipos e membros para habilitar programação dinâmica.
A tabela a seguir lista os tipos de política de reflexão e os elementos do programa com o qual podem ser usados.
Element Activate Procurar Dinâmico <Aplicativo> ✔️ ✔️ ✔️ <Assembly> ✔️ ✔️ ✔️ <AtributoImplica> ✔️ ✔️ ✔️ <Evento> ✔️ ✔️ <Campo> ✔️ ✔️ <Parâmetro genérico> ✔️ ✔️ ✔️ <ImpliesType> ✔️ ✔️ ✔️ <Método> ✔️ ✔️ <MethodInstantiation> ✔️ ✔️ <Namespace> ✔️ ✔️ ✔️ <Parâmetro> ✔️ ✔️ ✔️ <Propriedade> ✔️ ✔️ <Subtipos> ✔️ ✔️ ✔️ <Tipo> ✔️ ✔️ ✔️ <TypeInstantiation> ✔️ ✔️ ✔️ <Parâmetro de tipo> ✔️ ✔️ ✔️ Os tipos de política de serialização determinam quais metadados são disponibilizado no tempo de execução para serialização e desserialização:
O
Serialize
controla o acesso ao runtime para construtores, campos e propriedades para habilitar a serialização por bibliotecas de terceiros como o serializador Newtonsoft JSON.O
DataContractSerializer
controla o acesso de runtime a construtores, campos e propriedades, para habilitar que instâncias de tipo sejam serializadas pela classe DataContractSerializer.O
DataContractJsonSerializer
controla o acesso de runtime a construtores, campos e propriedades, para habilitar que instâncias de tipo sejam serializadas pela classe DataContractJsonSerializer.O
XmlSerializer
controla o acesso de runtime a construtores, campos e propriedades, para habilitar que instâncias de tipo sejam serializadas pela classe XmlSerializer.
A tabela a seguir lista os tipos de política de serialização e os elementos do programa com o qual podem ser usados.
Element Serializar DataContractSerializer DataContractJsonSerializer XmlSerializer <Aplicativo> ✔️ ✔️ ✔️ ✔️ <Assembly> ✔️ ✔️ ✔️ ✔️ <AtributoImplica> ✔️ ✔️ ✔️ ✔️ <Evento> <Campo> ✔️ <Parâmetro genérico> ✔️ ✔️ ✔️ ✔️ <ImpliesType> ✔️ ✔️ ✔️ ✔️ <Método> <MethodInstantiation> <Namespace> ✔️ ✔️ ✔️ ✔️ <Parâmetro> ✔️ ✔️ ✔️ ✔️ <Propriedade> ✔️ <Subtipos> ✔️ ✔️ ✔️ ✔️ <Tipo> ✔️ ✔️ ✔️ ✔️ <TypeInstantiation> ✔️ ✔️ ✔️ ✔️ <Parâmetro de tipo> ✔️ ✔️ ✔️ ✔️ Os tipos de política de interoperabilidade determinam os metadados que são disponibilizados no runtime para passar topos de referências, tipos de valor e apontadores de função ao COM e ao Windows Runtime:
O
MarshalObject
controla o marshaling nativo para o COM e o Windows Runtime para tipos de referência.O
MarshalDelegate
controla o marshaling nativo de tipos de delegados como ponteiros de função.O
MarshalStructure
controla o marshaling nativo para o COM e o Windows Runtime para tipos de valor.
A tabela a seguir lista os tipos de política de interoperabilidade e os elementos do programa com o qual podem ser usados.
Element MarshalObject MarshalDelegate MarshalStructure <Aplicativo> ✔️ ✔️ ✔️ <Assembly> ✔️ ✔️ ✔️ <AtributoImplica> ✔️ ✔️ ✔️ <Evento> <Campo> <Parâmetro genérico> ✔️ ✔️ ✔️ <ImpliesType> ✔️ ✔️ ✔️ <Método> <MethodInstantiation> <Namespace> ✔️ ✔️ ✔️ <Parâmetro> ✔️ ✔️ ✔️ <Propriedade> <Subtipos> ✔️ ✔️ ✔️ <Tipo> ✔️ ✔️ ✔️ <TypeInstantiation> ✔️ ✔️ ✔️ <Parâmetro de tipo> ✔️ ✔️ ✔️
Configurações de política
Cada tipo de política pode ser definido como um dos valores listados na tabela a seguir. Observe que elementos que representam os membros do tipo oferece suporte a um conjunto diferente de configurações de política que outros elementos.
Configuração de política | Descrição | Elementos Assembly , Namespace , Type e TypeInstantiation |
Elementos Event , Field , Method , MethodInstantiation e Property |
---|---|---|---|
All |
Habilita a política para todos os tipos e membros que a cadeia de ferramentas do .NET Nativo não remover. | ✔️ | |
Auto |
Especifica que a política padrão deve ser usada para o tipo de política desse elemento de programa. Isso é idêntico a omitir uma política para esse tipo de política. O Auto geralmente é usado para indicar que a diretiva é herdada de um elemento pai. |
✔️ | ✔️ |
Excluded |
Especifica que a política está desabilitada para um elemento de programa específico. Por exemplo, a diretiva de runtime:<Type Name="BusinessClasses.Person" Browse="Excluded" Dynamic="Excluded" /> Especifica que os metadados para a classe BusinessClasses.Person não estão disponíveis para busca ou para instanciar e modificar dinamicamente objetos Person . |
✔️ | ✔️ |
Included |
Habilita uma política se os metadados para o tipo de pai estiverem disponíveis. | ✔️ | |
Public |
Habilita a política para tipos públicos ou membros, a menos que a cadeia de ferramentas determine que o tipo ou membro é desnecessário e, portanto, remove-o. Essa configuração é diferente de Required Public , que garante que os metadados para membros e tipos públicos estão sempre disponíveis mesmo se a cadeia de ferramentas determinar que não são necessários. |
✔️ | |
PublicAndInternal |
Habilita a política para tipos ou membros públicos e internos, a menos que a cadeia de ferramentas determine que o tipo ou membro é desnecessário e, portanto, remove-o. Essa configuração é diferente de Required PublicAndInternal , que garante que os metadados para membros e tipos públicos e internos estão sempre disponíveis mesmo se a cadeia de ferramentas determinar que não são necessários. |
✔️ | |
Required |
Especifica que a política de membro está habilitada e os metadados estarão disponíveis mesmo se o membro parecer ser usado. | ✔️ | |
Required Public |
Habilita a política para tipos ou membros públicos e garante que os metadados para tipos e membros públicos estejam sempre disponíveis. Essa configuração é diferente de Public , disponibilizando metadados para tipos e membros públicos somente se a cadeia de ferramentas determinar que é necessário. |
✔️ | |
Required PublicAndInternal |
Habilita a política para tipos ou membros públicos e internos e garante que os metadados para tipos e membros públicos e internos estejam sempre disponíveis. Essa configuração é diferente de PublicAndInternal , disponibilizando metadados para tipos e membros públicos e internos somente se a cadeia de ferramentas determinar que é necessário. |
✔️ | |
Required All |
Necessita da cadeia de ferramentas para manter todos os tipos e membros, sejam usados ou não, e habilita a política para eles. | ✔️ |