Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
.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 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.
Attenzione
La System.Reflection.Metadata libreria ed PEReader non sono progettate per gestire l'input non attendibile. I file PE in formato non valido o dannosi possono causare comportamenti imprevisti, tra cui l'accesso alla memoria fuori dai limiti, crash di sistema o blocchi. Usare queste API solo con assembly attendibili.