Partager via


Format de fichier d’assembly .NET

.NET définit un format de fichier binaire, un assembly, utilisé pour décrire et contenir entièrement les programmes .NET. Les assemblages sont utilisés pour les programmes eux-mêmes ainsi que pour des bibliothèques dépendantes. Un programme .NET peut être exécuté en tant qu’un ou plusieurs assemblys, sans autres artefacts requis, au-delà de l’implémentation .NET appropriée. Les dépendances natives, y compris les API du système d’exploitation, sont un problème distinct et ne sont pas contenues dans le format d’assembly .NET, bien qu’elles soient parfois décrites avec ce format (par exemple, WinRT).

Chaque composant CLI contient les métadonnées pour les déclarations, les implémentations et les références spécifiques à ce composant. Par conséquent, les métadonnées propres au composant sont appelées métadonnées de composant, et le composant résultant est considéré comme auto-décrivant , à partir d’ECMA 335 I.9.1, Composants et assemblys.

Le format est entièrement spécifié et normalisé en tant qu’ECMA 335. Tous les compilateurs et runtimes .NET utilisent ce format. La présence d’un format binaire documenté et rarement mis à jour a été un avantage majeur (sans doute une exigence) pour l’interopérabilité. Le format a été mis à jour pour la dernière fois en 2005 (.NET Framework 2.0) pour prendre en charge les génériques et l’architecture du processeur.

Le format est indépendant du processeur et du système d’exploitation. Il a été utilisé dans le cadre d’implémentations .NET qui ciblent de nombreuses puces et processeurs. Bien que le format lui-même ait le patrimoine Windows, il est implémentable sur n’importe quel système d’exploitation. Son choix vraisemblablement le plus important pour l'interopérabilité du système d'exploitation est que la plupart des valeurs sont stockées dans un format little-endian. Il n’a pas d’affinité spécifique avec la taille du pointeur de machine (par exemple, 32 bits, 64 bits).

Le format d’assembly .NET est également très descriptif sur la structure d’un programme ou d’une bibliothèque donné. Il décrit les composants internes d’un assembly, en particulier les références et types d’assembly définis et leur structure interne. Les outils ou API peuvent lire et traiter ces informations pour l’affichage ou prendre des décisions programmatiques.

Format

Le format binaire .NET est basé sur le format de fichier Windows PE . En fait, les bibliothèques de classes .NET sont conformes aux PEs Windows et apparaissent en premier coup d’œil pour être des bibliothèques de liens dynamiques Windows (DLL) ou des exécutables d’application (EXEs). Il s’agit d’une caractéristique très utile sur Windows, où ils peuvent se masquer en tant que fichiers binaires exécutables natifs et obtenir certains des mêmes traitements (par exemple, chargement du système d’exploitation, outils PE).

En-têtes d'assemblage

En-têtes d’assembly d’ECMA 335 II.25.1, structure du format de fichier runtime.

Traiter les assemblages

Il est possible d’écrire des outils ou DES API pour traiter des assemblys. Les informations d’assembly permettent de prendre des décisions programmatiques au moment de l’exécution, de réécrire des assemblys, de fournir l’API IntelliSense dans un éditeur et de générer de la documentation. System.Reflection, System.Reflection.MetadataLoadContextet Mono.Cecil sont de bons exemples d’outils fréquemment utilisés à cet effet.