Partilhar via


Formato de arquivo de assembly .NET

O .NET define um formato de arquivo binário, assembly, que é usado para descrever e conter programas .NET. Os "assemblies", ou conjuntos de funções, são utilizados tanto para os próprios programas quanto para quaisquer bibliotecas dependentes. Um programa .NET pode ser executado como um ou mais assemblies, sem outros artefatos necessários, além da implementação .NET apropriada. As dependências nativas, incluindo APIs do sistema operacional, são uma preocupação separada e não estão contidas no formato de assembly .NET, embora às vezes sejam descritas com esse formato (por exemplo, WinRT).

Cada componente da CLI carrega os metadados para declarações, implementações e referências específicas para esse componente. Portanto, os metadados específicos do componente são referidos como metadados do componente, e o componente resultante é dito ser autodescritivo – do ECMA 335 I.9.1, Componentes e montagens.

O formato é totalmente especificado e padronizado como ECMA 335. Todos os compiladores e tempos de execução do .NET usam esse formato. A presença de um formato binário documentado e atualizado com pouca frequência tem sido um grande benefício (possivelmente um requisito) para a interoperabilidade. O formato foi atualizado pela última vez de forma substantiva em 2005 (.NET Framework 2.0) para acomodar genéricos e arquitetura de processador.

O formato é independente de CPU e SO. Ele tem sido usado como parte de implementações .NET que visam muitos chips e CPUs. Embora o formato em si tenha herança do Windows, ele é implementável em qualquer sistema operacional. Sua escolha indiscutivelmente mais significativa para a interoperabilidade do sistema operacional é que a maioria dos valores são armazenados no formato little-endian. Ele não tem uma afinidade específica com o tamanho do ponteiro da máquina (por exemplo, 32 bits, 64 bits).

O formato de assembly .NET também é muito descritivo sobre a estrutura de um determinado programa ou biblioteca. Ele descreve os componentes internos de uma montagem, especificamente referências de montagem e tipos definidos e sua estrutura interna. Ferramentas ou APIs podem ler e processar essas informações para exibição ou para tomar decisões programáticas.

Formato

O formato binário .NET é baseado no formato de arquivo do Windows PE. Na verdade, as bibliotecas de classes .NET são compatíveis com Windows PEs e parecem à primeira vista ser bibliotecas de vínculo dinâmico (DLLs) do Windows ou executáveis de aplicativos (EXEs). Esta é uma característica muito útil no Windows, onde eles podem se disfarçar como binários executáveis nativos e obter algum do mesmo tratamento (por exemplo, carga do sistema operacional, ferramentas PE).

Cabeçalhos de montagem

Cabeçalhos de montagem do ECMA 335 II.25.1, Estrutura do formato de arquivo em tempo de execução.

Processar os conjuntos

É possível escrever ferramentas ou APIs para processar assemblies. A informação assembly permite tomar decisões programáticas em tempo de execução, reescrever assemblies, fornecer API IntelliSense num editor e gerar documentação. System.Reflection, System.Reflection.MetadataLoadContexte Mono.Cecil são bons exemplos de ferramentas que são frequentemente usadas para este fim.