Formato dei file di assembly .NET

.NET definisce un formato di file binario, assembly, usato per descrivere e contenere programmi .NET. Gli assembly vengono usati per i programmi, nonché per tutte le librerie dipendenti. Un programma .NET può essere eseguito come uno di più assembly, senza altri elementi necessari, oltre all'implementazione di .NET appropriata. Le dipendenze native, incluse le API del sistema operativo, sono un problema separato e non sono contenute nel formato di assembly .NET, anche se sono talvolta descritte con questo formato (ad esempio, WinRT).

Ogni componente CLI usa metadati specifici per dichiarazioni, implementazioni e riferimenti. Quindi, i metadati specifici di un componente sono indicati come metadati del componente e il componente risultante viene definito come autodescrittivo, in base alla specifica ECMA 335 I.9.1 relativa a componenti e assembly.

Il formato è completamente specificato e standardizzato come ECMA 335. Tutti i compilatori e runtime .NET usano questo formato. La presenza di un formato binario documentato e aggiornato di rado rappresenta uno dei principali vantaggi, probabilmente anche un requisito, per l'interoperabilità. Il formato è stato aggiornato in modo sostanziale nel 2005 (.NET Framework 2.0) per contenere generics e architettura del processore.

Il formato è indipendente dalla CPU e dal sistema operativo. È stato usato come parte delle implementazioni di .NET che usano molti chip e CPU. Anche se è basato su Windows, il formato può essere implementato in qualsiasi sistema operativo. Il motivo per cui è considerato la scelta migliore per l'interoperabilità del sistema operativo è il fatto che la maggior parte dei valori vengono archiviati in formato little endian. Non presenta un'affinità specifica alle dimensioni del puntatore del computer, ad esempio 32 bit o 64 bit.

Il formato di assembly .NET offre anche una descrizione accurata della struttura di un programma o una libreria specifica. Descrive i componenti interni di un assembly, in particolare i riferimenti agli assembly e i tipi definiti e la relativa struttura interna. Gli strumenti o le API sono in grado di leggere ed elaborare queste informazioni per la visualizzazione o per prendere decisioni a livello di codice.

Formato

Il formato binario .NET è basato sul formato di file PE di Windows. Di fatto le librerie di classi .NET sono compatibili ai file PE di Windows e appaiono a prima vista come librerie a collegamento dinamico (DLL) o file eseguibili di applicazione (EXE) di Windows. Questa è una caratteristica molto utile in Windows, poiché le librerie possono essere mascherate da file binari eseguibili nativi e ricevere lo stesso trattamento (ad esempio, il carico del sistema operativo e gli strumenti PE).

Intestazioni di assembly

Intestazioni di assembly da ECMA 335 II.25.1, struttura del formato di file di runtime.

Elaborare gli assembly

È possibile scrivere strumenti o API per elaborare gli assembly. Le informazioni sugli assembly consentono di prendere decisioni a livello di codice in fase di esecuzione, riscrivere gli assembly, fornire IntelliSense api in un editor e generare la documentazione. System.Reflection, System.Reflection.MetadataLoadContext e Mono.Cecil sono esempi validi di strumenti usati di frequente per questo scopo.