Os conjuntos de peças de dinâmico digite geração
Assemblies de peças são assemblies dinâmicos que podem ser baixados sem descarregar o domínio do aplicativo em que foram criados. Pode ser recuperada toda memória gerenciada e usada por um conjunto de peças e os tipos que ele contém. Informações como, por exemplo, o nome do assembly são removidas da tabelas internas.
Para habilitar o descarregamento, use o AssemblyBuilderAccess.RunAndCollect sinalizador quando você cria um assembly dinâmico. O assembly é transitório (isto é, ele não pode ser salvo) e está sujeito às limitações descritas a restrições em Assemblies peças seção. O common language runtime (CLR) descarrega automaticamente um conjunto de peças quando vocês lançaram todos os objetos associados ao assembly. Em todos os aspectos, peças assemblies são criados e usados da mesma forma como os outros assemblies dinâmicos.
Tempo de vida de conjuntos de peças
A vida útil de um assembly dinâmico peças é controlada pela existência de referências para os tipos que ele contém e os objetos que são criados a partir desses tipos. O common language runtime não descarrega um assembly como um ou mais dos seguintes existem (T é qualquer tipo definido no assembly):
Uma instância de T.
Uma instância de uma matriz de T, ou uma instância de uma coleção genérica que tenha T como um dos seus argumentos de tipo, mesmo se a matriz ou coleção está vazio.
Uma instância de Type ou TypeBuilder que representa o T.
Observação
Você deve liberar todos os objetos que representam partes do assembly.O ModuleBuilder que definido T manterá uma referência a TypeBuildere o AssemblyBuilder objeto mantém uma referência para o ModuleBuilder, portanto, as referências a esses objetos devem ser liberadas.Até mesmo a existência de um LocalBuilder ou um ILGenerator usado na construção de T impede o descarregamento.
Uma referência estática em T por outro tipo dinamicamente definido T1 que ainda estiver acessível através da execução de código. Por exemplo, T1 pode derivar de T, ou T pode ser o tipo de um parâmetro de um método de T1.
A ByRef a um campo estático que pertence a T.
A RuntimeTypeHandle, RuntimeFieldHandle, ou RuntimeMethodHandle que se refere a T ou como um componente do T.
Uma instância de qualquer objeto de reflexão que poderia ser usado indiretamente ou diretamente para o acesso a Type objeto que representa o T. Por exemplo, o Type o objeto para T pode ser obtido em um tipo de matriz, cujo tipo de elemento é T, ou a partir de um tipo genérico que tem T como um argumento de tipo.
Um método M na pilha de chamadas de qualquer segmento, onde M é um método de T ou um método de nível de módulo que está definido no assembly.
Um delegado para um método estático que é definido em um módulo do assembly.
Se um item dessa lista se houver apenas um tipo ou um método no assembly, apenas o tempo de execução não pode descarregar o assembly.
Observação
O runtime não descarrega o assembly, na verdade, até que os finalizadores tem executado para todos os itens na lista.
Para fins de controle de tempo de vida, um genérico construído digite como List<int> (List(Of Integer) em Visual Basic) que é criado e usado na geração de um conjunto de peças é considerada ter sido definidas no assembly que contém a definição de tipo genérico ou em um assembly que contém a definição de um dos seus argumentos de tipo. O conjunto exato usado é um detalhe de implementação e sujeitos a alterações.
Restrições de Assemblies de peças
As seguintes restrições se aplicam a assemblies de peças:
Referências estáticas tipos em um assembly dinâmico comum não podem ter referências estáticas para tipos definidos em um conjunto de peças. Por exemplo, se você definir um tipo comum que herda um tipo em um conjunto de peças, um NotSupportedException exceção é lançada. Um tipo em um conjunto de peças pode ter referências estáticas para um tipo em outro conjunto de peças, mas isso estende a vida útil do assembly referenciado para o tempo de vida do assembly de referência.
Interoperabilidade COM interfaces COM não podem ser definidos dentro de um assembly de peças e não há instâncias de tipos dentro de um assembly de peças podem ser convertidas em objetos COM. Um tipo em um conjunto de peças não pode servir como um invólucro (CCW) ou runtime callable wrapper (RCW). No entanto, os tipos em assemblies peças podem usar objetos que implementam interfaces COM.
Invocação de plataformaos métodos que possuem o DllImportAttribute atributo não serão compilados quando elas são declaradas dentro de um conjunto de peças. O OpCodes.Calli instrução não pode ser usada na implementação de um tipo em um conjunto de peças, e esses tipos não podem ser empacotados para código não gerenciado. No entanto, você pode chamar código nativo usando um ponto de entrada é declarado em um assembly peças.
Empacotamento de os objetos definidos em assemblies peças (em particular, delegados) não podem ser empacotados. Esta é uma restrição em todos os tipos de emitido transitórios.
Carregamento de assembly emissão de reflexão é o único mecanismo, há suporte para carregar assemblies de peças. Assemblies são carregados por qualquer outra forma de carregamento do assembly não podem ser descarregados.
Objetos vinculados a contexto variáveis de contexto estático não são suportadas. Não é possível estender a tipos de um conjunto de peças ContextBoundObject. No entanto, o código nos assemblies peças pode usar objetos vinculados a contexto que são definidos em outro lugar.
Dados de thread estático variáveis de Thread estático não são suportadas.