Assemblys dans .NET

Les assemblys forment les unités fondamentales du déploiement, du contrôle de version, de la réutilisation, de l’étendue de l’activation et des autorisations de sécurité pour . Applications basées sur NET. Un assembly est une collection de types et de ressources conçus pour opérer ensemble et former une unité logique de fonctionnalité. Les assemblys prennent la forme de fichiers exécutables (.exe) ou de bibliothèque de liens dynamiques (.dll), et sont les blocs de construction des applications .NET. Ils fournissent au Common Language Runtime les informations dont il a besoin pour connaître les implémentations de type.

Dans .NET et .NET Framework, vous pouvez créer un assembly à partir d’un ou plusieurs fichiers de code source. Dans .NET Framework, les assemblys peuvent contenir un ou plusieurs modules. Cela permet aux projets plus volumineux d’être planifiés afin que plusieurs développeurs puissent travailler sur des fichiers ou modules de code source distincts, qui sont combinés pour créer un seul assembly. Pour plus d’informations sur les modules, consultez How to: Build a multifile assembly.

Les assemblys ont les propriétés suivantes :

  • Les assemblys sont implémentés en tant que fichiers .exe ou .dll .

  • Pour les bibliothèques qui ciblent .NET Framework, vous pouvez partager des assemblys entre des applications en les plaçant dans le Global Assembly Cache (GAC). Vous devez définir des assemblys de nom fort avant de pouvoir les inclure dans le GAC. Pour plus d’informations, consultez assemblys nommés fort.

  • Les assemblys sont chargés en mémoire uniquement s’ils sont requis. S’ils ne sont pas utilisés, ils ne sont pas chargés. Cela signifie que les assemblys peuvent être un moyen efficace pour gérer les ressources dans les grands projets.

  • Vous pouvez obtenir par programme des informations sur un assembly à l’aide de la réflexion. Pour plus d’informations, consultez Réflexion (C#) ou Réflexion (Visual Basic).

  • Vous pouvez charger un assembly simplement pour l’inspecter à l’aide de la MetadataLoadContext classe sur .NET et .NET Framework. MetadataLoadContext remplace les Assembly.ReflectionOnlyLoad méthodes.

Assemblys dans le Common Language Runtime

Les assemblys fournissent le Common Language Runtime avec les informations dont il a besoin pour connaître les implémentations de type. Pour le runtime, un type n'existe pas en dehors du contexte d'un assembly.

Un assembly définit les informations suivantes :

  • Code que le common language runtime s’exécute. Notez que chaque assembly ne peut avoir qu’un seul point d’entrée : DllMain, WinMainou Main.

  • Limite de sécurité. Un assembly est l'unité au niveau de laquelle les autorisations sont demandées et octroyées. Pour plus d’informations sur les limites de sécurité dans les assemblys, consultez considérations relatives à la sécurité des assemblys.

  • Limite de type. L'identité de chaque type inclut le nom de l'assembly dans lequel il réside. Un type appelé MyType chargé dans l'étendue d'un assembly n'est pas le même qu'un type appelé MyType chargé dans l'étendue d'un autre assembly.

  • Limite d’étendue de référence. Le manifeste d’assembly contient des métadonnées utilisées pour résoudre les types et satisfaire les demandes de ressources. Le manifeste spécifie les types et ressources à exposer en dehors de l’assembly et énumère d’autres assemblys sur lesquels il dépend. Le code MSIL (Microsoft Intermediate Language) dans un fichier exécutable portable (PE) ne sera pas exécuté, sauf s’il a un manifeste d’assembly associé.

  • Limite de version. L’assembly est la plus petite unité versionable dans le common language runtime. Tous les types et ressources du même assembly sont versionnés en tant qu’unité. Le manifeste d’assembly décrit les dépendances de version que vous spécifiez pour tous les assemblys dépendants. Pour plus d’informations sur le contrôle de version, consultez Contrôle de version d’assembly.

  • Unité de déploiement. Quand une application démarre, seuls les assemblys qu'elle appelle initialement doivent être présents. D’autres assemblys, tels que des assemblys contenant des ressources de localisation ou des classes utilitaires, peuvent être récupérés à la demande. Cela permet aux applications d’être simples et minces lors du premier téléchargement. Pour plus d’informations sur le déploiement d’assemblys, consultez Déployer des applications.

  • Unité d’exécution côte à côte. Pour plus d’informations sur l’exécution de plusieurs versions d’un assembly, consultez Assemblys et exécution côte à côte.

Créer un assembly

Les assemblys peuvent être statiques ou dynamiques. Les assemblys statiques sont stockés sur le disque dans des fichiers exécutables portables (PE). Les assemblys statiques peuvent inclure des interfaces, des classes et des ressources telles que des bitmaps, des fichiers JPEG et d’autres fichiers de ressources. Vous pouvez également créer des assemblys dynamiques, qui sont exécutés directement à partir de la mémoire et qui ne sont pas enregistrés sur le disque avant l’exécution. Vous pouvez enregistrer des assemblys dynamiques sur le disque une fois qu'ils ont été exécutés.

Pour créer des assemblys, différentes possibilités s'offrent à vous. Vous pouvez utiliser des outils de développement, tels que Visual Studio, qui peuvent créer des fichiers.dll ou .exe. Vous pouvez utiliser des outils dans le Kit de développement logiciel (SDK) Windows pour créer des assemblys avec des modules à partir d’autres environnements de développement. Vous pouvez également utiliser les API du Common Language Runtime, comme System.Reflection.Emit, pour créer des assemblys dynamiques.

Compilez des assemblys en les créant dans Visual Studio, en les créant avec des outils d’interface en ligne de commande .NET Core ou en créant des assemblys .NET Framework avec un compilateur en ligne de commande. Pour plus d’informations sur la création d’assemblys à l’aide de l’interface CLI .NET, consultez la vue d’ensemble de l’interface CLI .NET.

Notes

Pour générer un assembly dans Visual Studio, dans le menu Build, sélectionnez Générer.

Manifeste d'assembly

Chaque assembly a un fichier manifeste d’assembly . Comme pour une table des matières, le manifeste d’assembly contient :

  • L’identité de l’assembly (nom et version).

  • Table de fichiers décrivant tous les autres fichiers qui composent l’assembly, tels que d’autres assemblys que vous avez créés, que votre fichier .exe ou .dll s’appuie sur des fichiers bitmap ou Readme.

  • Liste de référence d’assembly, qui est une liste de toutes les dépendances externes, telles que les.dllou d’autres fichiers. Les références de l’assembly contiennent des références aux objets globaux et privés. Les objets globaux sont disponibles pour toutes les autres applications. Dans .NET Core, les objets globaux sont couplés à un runtime .NET Core particulier. Dans .NET Framework, les objets globaux résident dans le Global Assembly Cache (GAC). System.IO.dll est un exemple d’assembly dans le GAC. Les objets privés doivent se trouver au niveau d’un répertoire ou sous le répertoire dans lequel votre application est installée.

Étant donné que les assemblys contiennent des informations sur le contenu, le contrôle de version et les dépendances, les applications qui les utilisent n’ont pas besoin de s’appuyer sur des sources externes, telles que le Registre sur les systèmes Windows, pour fonctionner correctement. Les assemblys réduisent les conflits.dll et rendent vos applications plus fiables et plus faciles à déployer. Dans de nombreux cas, vous pouvez installer une application .NET simplement en copiant ses fichiers sur l’ordinateur cible. Pour plus d’informations, consultez manifeste d’assembly.

Ajouter une référence à un assembly

Pour utiliser un assembly dans une application, vous devez y ajouter une référence. Une fois qu’un assembly est référencé, tous les types, propriétés, méthodes et autres membres de ses espaces de noms sont disponibles pour votre application comme si leur code faisait partie de votre fichier source.

Notes

La plupart des assemblys à partir de la bibliothèque de classes .NET sont référencés automatiquement. Si un assembly système n’est pas automatiquement référencé, ajoutez une référence de l’une des façons suivantes :

  • Pour .NET et .NET Core, ajoutez une référence au package NuGet qui contient l’assembly. Utilisez l’NuGet Gestionnaire de package dans Visual Studio ou ajoutez un <élément PackageReference> pour l’assembly au projet .csproj ou .vbproj.
  • Pour .NET Framework, ajoutez une référence à l’assembly à l’aide de la boîte de dialogue Ajouter une référence dans Visual Studio, ou en utilisant l’option -reference de ligne de commande pour les compilateurs C# ou Visual Basic.

En C#, vous pouvez utiliser deux versions du même assembly dans une seule application. Pour plus d’informations, consultez extern alias.

Intitulé Description
Contenu d’assembly Éléments qui composent un assembly.
Manifeste d’assembly Données dans le manifeste d’assembly et comment elles sont stockées dans des assemblys.
Global Assembly Cache Comment le GAC stocke et utilise des assemblys.
Assemblys nommés fort Caractéristiques des assemblys nommés fort.
Aspects de la sécurité des assemblys Fonctionnement de la sécurité avec les assemblys.
Contrôle de version des assemblys Vue d’ensemble de la stratégie de contrôle de version .NET Framework.
Emplacement d’assembly Où localiser des assemblys.
Assemblys et exécution côte à côte Utilisez plusieurs versions du runtime ou d’un assembly simultanément.
Envoyer des assemblys et des méthodes dynamiques Comment créer des assemblys dynamiques.
Comment le runtime localise les assemblys Comment le .NET Framework résout les références d’assembly au moment de l’exécution.

Informations de référence

System.Reflection.Assembly

Voir aussi