.NET Assembly-bestandsindeling
.NET definieert een binaire bestandsindeling, assembly, die wordt gebruikt om .NET-programma's volledig te beschrijven en te bevatten. Assembly's worden gebruikt voor de programma's zelf en eventuele afhankelijke bibliotheken. Een .NET-programma kan worden uitgevoerd als een of meer assembly's, zonder andere vereiste artefacten, buiten de juiste .NET-implementatie. Systeemeigen afhankelijkheden, waaronder API's van het besturingssysteem, zijn een afzonderlijk probleem en zijn niet opgenomen in de .NET-assembly-indeling, hoewel ze soms worden beschreven met deze indeling (bijvoorbeeld WinRT).
Elk CLI-onderdeel bevat de metagegevens voor declaraties, implementaties en verwijzingen die specifiek zijn voor dat onderdeel. Daarom wordt de componentspecifieke metagegevens aangeduid als metagegevens van onderdelen en wordt het resulterende onderdeel zelfbeschrijfd genoemd: van ECMA 335 I.9.1, Onderdelen en assembly's.
De indeling is volledig opgegeven en gestandaardiseerd als ECMA 335. Alle .NET-compilers en runtimes gebruiken deze indeling. De aanwezigheid van een gedocumenteerde en zelden bijgewerkte binaire indeling is een belangrijk voordeel (wellicht een vereiste) voor interoperabiliteit. De indeling is in 2005 (.NET Framework 2.0) voor het laatst bijgewerkt voor algemene en processorarchitectuur.
De indeling is CPU- en OS-agnostisch. Het is gebruikt als onderdeel van .NET-implementaties die gericht zijn op veel chips en CPU's. Hoewel de indeling zelf Windows-erfgoed heeft, kan deze worden geïmplementeerd op elk besturingssysteem. De meest significante keuze voor interoperabiliteit van het besturingssysteem is dat de meeste waarden worden opgeslagen in de little-endian-indeling. Er is geen specifieke affiniteit met de grootte van de machinepointer (bijvoorbeeld 32-bits, 64-bits).
De .NET-assembly-indeling is ook erg beschrijvend over de structuur van een bepaald programma of een bepaalde bibliotheek. Hierin worden de interne onderdelen van een assembly beschreven, met name assemblyverwijzingen en typen die zijn gedefinieerd en hun interne structuur. Hulpprogramma's of API's kunnen deze informatie lezen en verwerken voor weergave of om programmatische beslissingen te nemen.
Indeling
De binaire .NET-indeling is gebaseerd op de Windows PE-bestandsindeling . In feite zijn .NET-klassebibliotheken conforme Windows-PE's en worden op het eerste gezicht weergegeven als Windows DYNAMIC Link Libraries (DLL's) of uitvoerbare toepassingsbestanden (EXE's). Dit is een zeer nuttige eigenschap in Windows, waar ze zich kunnen maskeren als systeemeigen binaire bestanden en een deel van dezelfde behandeling kunnen krijgen (bijvoorbeeld os load, PE-hulpprogramma's).
AssemblyHeaders van ECMA 335 II.25.1, Structuur van de runtime-bestandsindeling.
De assembly's verwerken
Het is mogelijk om hulpprogramma's of API's te schrijven om assembly's te verwerken. Assembly-informatie maakt het mogelijk programmatische beslissingen te nemen tijdens runtime, assembly's te herschrijven, API IntelliSense in een editor te leveren en documentatie te genereren. System.Reflection, en System.Reflection.MetadataLoadContextMono.Cecil zijn goede voorbeelden van hulpprogramma's die vaak voor dit doel worden gebruikt.