Condividi tramite


Formato di 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 stessi, nonché per le librerie dipendenti. Un programma .NET può essere eseguito come uno o più assembly, senza altri artefatti necessari, oltre all'implementazione .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 dell'interfaccia della riga di comando contiene i metadati per dichiarazioni, implementazioni e riferimenti specifici di tale componente. Di conseguenza, i metadati specifici del componente vengono definiti metadati dei componenti e il componente risultante viene detto autodescritto, da ECMA 335 I.9.1, Componenti e assembly.

Il formato è completamente specificato e standardizzato come ECMA 335. Tutti i compilatori e i runtime .NET usano questo formato. La presenza di un formato binario documentato e aggiornato raramente è stato un vantaggio importante (probabilmente 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 destinate a molti chip e CPU. Anche se il formato stesso ha un patrimonio di Windows, è implementabile in qualsiasi sistema operativo. La scelta probabilmente più significativa per l'interoperabilità del sistema operativo è che la maggior parte dei valori è archiviata in formato little-endian. Non ha un'affinità specifica con le dimensioni del puntatore del computer, ad esempio a 32 bit, a 64 bit.

Il formato di assembly .NET è anche molto descrittivo sulla struttura di un determinato programma o libreria. 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 possono 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 windows PE . In effetti, le librerie di classi .NET sono conformi alle PES di Windows e vengono visualizzate a prima vista come librerie di collegamento dinamico (DLL) di Windows o eseguibili di applicazioni (EXEs). Questa è una caratteristica molto utile in Windows, in cui possono mascherare come file binari eseguibili nativi e ottenere alcuni dello stesso trattamento (ad esempio, caricamento del sistema operativo, strumenti PE).

Intestazioni di assembly

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

Elaborare gli assemblaggi

È 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.MetadataLoadContexte Mono.Cecil sono esempi validi di strumenti usati di frequente per questo scopo.