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 são usados para os próprios programas, bem como 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 de tempo de execução.

Processar as montagens

É possível escrever ferramentas ou APIs para processar assemblies. As informações de montagem permitem tomar decisões programáticas em tempo de execução, reescrever montagens, fornecer API IntelliSense em um 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.