Que sont les assemblys .NET?

193

Que sont les assemblys .NET? J'ai parcouru le net et je n'arrive pas à comprendre la définition.

Massyle Djama
la source
11
Lisez CLR via C # . Vous saurez tout à ce sujet à la fin. Je recommande fortement ce livre.
David Neale

Réponses:

169

En termes plus simples: un morceau de code (précompilé) qui peut être exécuté par l'environnement d'exécution .NET. Un programme .NET se compose d'un ou plusieurs assemblys.

Adrian Grigore
la source
30
@KimJongWoo - Non, un fichier Jar est juste un fichier zip qui contient des fichiers de bytecode compilés. Un assembly est un fichier PE (Portable Executable format) (c'est-à-dire une DLL ou un EXE), mais conceptuellement, il sert des objectifs similaires.
Erik Funkenbusch
C'est donc comme un .classfichier dans le monde Java?
mljrg
245

L'assemblage est la plus petite unité de déploiement d'une application .net. Il peut s'agir d'une DLL ou d'un exe .
Il existe principalement deux types:

  1. Assemblée privée: la DLL ou l'exe qui est la propriété exclusive d'une seule application. Il est généralement stocké dans le dossier racine de l'application

  2. Assemblage public / partagé: c'est une DLL qui peut être utilisée par plusieurs applications à la fois. Un assembly partagé est stocké dans GAC, c'est-à-dire Global Assembly Cache .

Cela semble difficile? Naa ....
GAC est simplement le dossier C: \ Windows \ Assembly où vous pouvez trouver les assemblys / dll publics de tous les logiciels installés sur votre PC.

Il existe également un troisième type d'assemblage, le moins connu: l'assemblage satellite .
Un assemblage satellite contient uniquement des objets statiques comme des images et d'autres fichiers non exécutables requis par l'application.

J'espère que cela aide les lecteurs!

mangeshkt
la source
3
Notez que l'emplacement est différent pour .NET 4.0: stackoverflow.com/questions/2660355/net-4-0-has-a-new-gac-why
TrueWill
cela pourrait devenir lent. une fois qu'un dossier en a reçu un millier, Windows ralentit en essayant de parcourir l'arborescence de répertoires ou simplement de lire le répertoire.
Jim Michaels
@mangeshkt - Est-il possible de copier la dll d'une application et de la placer dans le répertoire racine d'une autre, pourrai-je utiliser les fonctionnalités de la 1ère?
Shivam657
57

Assemblées

Lorsque vous compilez une application, le code MSIL créé est stocké dans un assembly. Les assemblys incluent à la fois des fichiers d'application exécutables que vous pouvez exécuter directement à partir de Windows sans avoir besoin d'autres programmes (ceux-ci ont une extension de fichier .exe) et des bibliothèques (qui ont une extension .dll) à utiliser par d'autres applications.

En plus de contenir MSIL, les assemblys incluent également des méta-informations (c'est-à-dire des informations sur les informations contenues dans l'assembly, également appelées métadonnées) et des ressources facultatives (données supplémentaires utilisées par MSIL, telles que des fichiers audio et des images). Les méta-informations permettent aux assemblages d'être entièrement auto-descriptifs. Vous n'avez besoin d'aucune autre information pour utiliser un assembly, ce qui signifie que vous évitez des situations telles que le fait de ne pas ajouter les données requises au registre système, etc., ce qui était souvent un problème lors du développement avec d'autres plates-formes.

Cela signifie que le déploiement d'applications est souvent aussi simple que de copier les fichiers dans un répertoire sur un ordinateur distant. Étant donné qu'aucune information supplémentaire n'est requise sur les systèmes cibles, vous pouvez simplement exécuter un fichier exécutable à partir de ce répertoire et (en supposant que le .NET CLR est installé), vous êtes prêt à partir.

Bien sûr, vous ne voudrez pas nécessairement inclure tout le nécessaire pour exécuter une application en un seul endroit. Vous pouvez écrire du code qui exécute les tâches requises par plusieurs applications. Dans de telles situations, il est souvent utile de placer le code réutilisable dans un endroit accessible à toutes les applications. Dans le .NET Framework, il s'agit du Global Assembly Cache (GAC). Le placement de code dans le GAC est simple - vous placez simplement l'assembly contenant le code dans le répertoire contenant ce cache.

Saleh
la source
Pour plus de clarté "Lorsque vous compilez une application, le code MSIL créé est stocké dans un assembly". Il suffit d'ajouter pour afficher le contenu d'un assemblage, vous pouvez utiliser ILSPY.
Sandeep
33

Un assembly est le fichier .dll réel sur votre disque dur où les classes du .NET Framework sont stockées. Par exemple, toutes les classes contenues dans ASP.NET Framework se trouvent dans un assembly nommé System.Web.dll.

Plus précisément, un assembly est l'unité principale de déploiement, de sécurité et de contrôle de version dans le .NET Framework. Dans la mesure où un assembly peut s'étendre sur plusieurs fichiers, un assembly est souvent appelé une DLL "logique".

Remarque

Le .NET Framework (version 2.0) comprend 51 assemblys.

Il existe deux types d'assemblées: privées et partagées. Un assembly privé ne peut être utilisé que par une seule application. Un assemblage partagé, en revanche, peut être utilisé par toutes les applications situées sur le même serveur.

Les assemblys partagés se trouvent dans le Global Assembly Cache (GAC). Par exemple, l'assembly System.Web.dll et tous les autres assemblys inclus avec le .NET Framework se trouvent dans le Global Assembly Cache.

Remarque

Le Global Assembly Cache se trouve physiquement dans le dossier \ WINDOWS \ Assembly de votre ordinateur. Il existe une copie distincte de chaque assembly dans votre dossier \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727. Le premier ensemble d'assemblages est utilisé au moment de l'exécution et le second ensemble est utilisé au moment de la compilation.

Avant de pouvoir utiliser une classe contenue dans un assembly dans votre application, vous devez ajouter une référence à l'assembly. Par défaut, une application ASP.NET référence les assemblys les plus courants contenus dans le Global Assembly Cache:

mscorlib.dll

System.dll

System.Configuration.dll

System.Web.dll

System.Data.dll

System.Web.Services.dll

System.Xml.dll

System.Drawing.dll

System.EnterpriseServices.dll

System.Web.Mobile.dll

Pour utiliser une classe particulière dans le .NET Framework, vous devez faire deux choses. Tout d'abord, votre application doit référencer l'assembly qui contient la classe. Deuxièmement, votre application doit importer l'espace de noms associé à la classe.

Dans la plupart des cas, vous n'aurez pas à vous soucier de référencer l'assembly nécessaire car les assemblys les plus courants sont référencés automatiquement. Toutefois, si vous devez utiliser un assembly spécialisé, vous devez ajouter explicitement une référence à l'assembly. Par exemple, si vous devez interagir avec Active Directory à l'aide des classes de l'espace de noms System.DirectoryServices, vous devrez ajouter une référence à l'assembly System.DirectoryServices.dll à votre application.

Chaque entrée de classe dans la documentation du SDK .NET Framework répertorie l'assembly et l'espace de noms associés à la classe. Par exemple, si vous recherchez la classe MessageQueue dans la documentation, vous découvrirez que cette classe se trouve dans l'espace de noms System.Messaging situé dans l'assembly System.Messaging.dll.

Si vous utilisez Visual Web Developer, vous pouvez ajouter une référence à un assembly de manière explicite en sélectionnant l'option de menu Website, Add Reference et en sélectionnant le nom de l'assembly que vous devez référencer. Par exemple, l'ajout d'une référence à l'assembly System.Messaging.dll entraîne l'ajout du fichier de configuration Web du listing 1.4 à votre application.

Par exemple. Web.Config

enter code here

Si vous préférez ne pas utiliser Visual Web Developer, vous pouvez ajouter la référence à l'assembly System.Messaging.dll en créant manuellement le fichier dans l'exemple ci-dessus

Hung Vu
la source
1
Beaucoup plus technique que la réponse acceptée, cela devrait être la réponse acceptée.
sparkyShorts
8

Wikipédia doit dire:

Dans le framework Microsoft .NET, un assembly est une bibliothèque de code partiellement compilée à utiliser dans le déploiement, la gestion des versions et la sécurité. Il existe deux types: les assemblys de processus (EXE) et les assemblys de bibliothèque (DLL). Un assembly de processus représente un processus qui utilisera des classes définies dans des assemblys de bibliothèque. Les assemblys .NET contiennent du code en CIL, qui est généralement généré à partir d'un langage CLI, puis compilé en langage machine au moment de l'exécution par le compilateur CLR juste à temps. Un assemblage peut consister en un ou plusieurs fichiers. Les fichiers de code sont appelés modules. Un assembly peut contenir plusieurs modules de code et comme il est possible d'utiliser différents langages pour créer des modules de code, il est techniquement possible d'utiliser plusieurs langages différents pour créer un assembly.

Si vous avez vraiment parcouru, il serait utile de clarifier ce que vous ne comprenez pas

Christina Mayers
la source
7

Voir ceci :

Dans le framework Microsoft .NET, un assembly est une bibliothèque de code partiellement compilée pour une utilisation dans le déploiement, la gestion des versions et la sécurité

Anton Gogolev
la source
7

collection physique de classe, interface, énum, ​​etc. qui est en code IL. Qui peut être un fichier .EXE ou .DLL .EXE est un fichier exécutable et .DLL peut être utilisé dynamiquement dans n'importe quelle langue prise en charge par .net.

Govind Malviya
la source
6

Un assembly est une unité d'exécution composée de types et d'autres ressources. Tous les types d'un assemblage ont le même numéro de version.

Souvent, un assembly n'a qu'un seul espace de noms et est utilisé par un programme. Mais il peut s'étendre sur plusieurs espaces de noms. En outre, un espace de noms peut s'étendre sur plusieurs assemblys. Dans les grandes conceptions, un assemblage peut se composer de plusieurs fichiers qui sont maintenus ensemble par un manifeste (c'est-à-dire une table des matières).

En C #, un assembly est le plus petit déploiement d'une application .Net. Il peut s'agir d'une dll ou d'une exe. Il a deux types: 1. Private Assembly 2. Public / Shared Assembly

Abhishek Singh
la source
6

En plus de la réponse acceptée, je veux vous donner un exemple!

Par exemple, nous utilisons tous

System.Console.WriteLine()

Mais où est le code pour System.Console.WriteLine !?
quel est le code qui place le texte sur la console?

Si vous consultez la première page de la documentation de la classe Console , vous verrez en haut ce qui suit: Assembly: mscorlib (in mscorlib.dll) Ceci indique que le code de la classe Console se trouve dans un ensemble. nommé mscorlib. Un assembly peut être composé de plusieurs fichiers, mais dans ce cas, il s'agit d'un seul fichier, qui est la bibliothèque de liens dynamiques mscorlib.dll.

Le fichier mscorlib.dll est très important dans .NET, il s'agit de la DLL principale pour les bibliothèques de classes dans .NET, et il contient toutes les classes et structures de base .NET.

si vous connaissez C ou C ++, vous avez généralement besoin d'une directive #include en haut qui fait référence à un fichier d'en-tête. Le fichier include fournit des prototypes de fonctions au compilateur. sur le contraste Le compilateur C # n'a pas besoin de fichiers d'en-tête. Lors de la compilation, le compilateur C # accède directement au fichier mscorlib.dll et obtient des informations des métadonnées de ce fichier concernant toutes les classes et autres types qui y sont définis.

Le compilateur C # est capable d'établir que mscorlib.dll contient en effet une classe nommée Console dans un espace de noms nommé System avec une méthode nommée WriteLine qui accepte un seul argument de type chaîne.

Le compilateur C # peut déterminer que l'appel WriteLine est valide et le compilateur établit une référence à l'assembly mscorlib dans l'exécutable.

par défaut Le compilateur C # accède à mscorlib.dll, mais pour les autres DLL, vous devrez indiquer au compilateur l'assembly dans lequel se trouvent les classes. Ce sont des références.

J'espère que c'est clair maintenant!

De DotNetBookZero Charles pitzold

Ahmed KhaShaba
la source
5

MSDN a une bonne explication :

Les assemblys sont les blocs de construction des applications .NET Framework; ils forment l'unité fondamentale du déploiement, du contrôle de version, de la réutilisation, de la portée d'activation et des autorisations de sécurité. Un assembly est un ensemble de types et de ressources conçus pour fonctionner ensemble et former une unité logique de fonctionnalité. Un assembly fournit au runtime de langage commun 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.

Matt Warren
la source
4

Un assembly est une collection de types et de ressources qui forme une unité logique de fonctionnalité. Tous les types dans .NET Framework doivent exister dans les assemblys; le runtime de langage commun ne prend pas en charge les types en dehors des assemblys. Chaque fois que vous créez une application Microsoft Windows®, un service Windows, une bibliothèque de classes ou une autre application avec Visual Basic .NET, vous créez un assembly unique. Chaque assembly est stocké dans un fichier .exe ou .dll.

Source: https://msdn.microsoft.com/en-us/library/ms973231.aspx#assenamesp_topic4

Pour ceux qui ont des antécédents Java comme moi, j'espère que le diagramme suivant clarifie les concepts -

Les assemblys sont comme des fichiers jar (contenant plusieurs fichiers .class). Votre code peut référencer un assemblie existant ou votre code lui-même peut être publié en tant qu'assemblie pour un autre code à référencer et à utiliser (vous pouvez le penser comme des fichiers jar en Java que vous pouvez ajouter dans vos dépendances de projet).

À la fin de la journée, un assembly est un code compilé qui peut être exécuté sur n'importe quel système d'exploitation avec CLR installé. Cela revient à dire que le fichier .class ou le fichier jar fourni peut s'exécuter sur n'importe quelle machine sur laquelle JVM est installée.

entrez la description de l'image ici

Aniket Thakur
la source
2

Dans .Net, un assemblage peut être:

Une collection de divers gérables parties contenant Types (or Classes), Resources (Bitmaps/Images/Strings/Files), Namespaces, Config Filescompilé Privatelyou Publicly; déployé dans un dossier localou Shared (GAC); discover-ablepar d'autres programs/assemblieset; peut être édité en version.

VS1
la source
2

L'assemblage est la plus petite unité de sécurité de version, de déploiement et de réutilisation de code dans Microsoft.Net.

Il contient:

- Assembly Identity
- Manifest
- Metadata
- MSIL Code
- Security Information
- Assembly Header
Lay Leangsros
la source
1

L'assemblage est la partie fondamentale de la programmation avec .NET Framework. Il contient du code que CLR exécute le code MSIL (Microsoft Intermediate Language) dans un fichier exécutable portable ne sera pas exécuté s'il n'a pas de manifeste d'assembly associé.

Kamini joshi
la source
1

Les applications .NET sont construites en assemblant un nombre illimité d'assemblages. En termes simples, un assemblage n'est rien de plus qu'un binaire versionné et auto-descriptif (DLL ou EXE) contenant une collection de types (classes, interfaces, structures, etc.) et des recours facultatifs (images, tables de chaînes et ainsi de suite). Une chose dont il est douloureusement conscient en ce moment, c'est que l'organisation interne d'un assembly .NET ne ressemble en rien à l'organisation interne d'un serveur COM classique (quelles que soient les extensions de fichiers partagées).

Shivam Sharma
la source
1

Dans .NET, lorsque nous compilons notre code source, l'assembly est généré dans Visual Studio. L'assemblage se compose de deux parties Manifest et IL (Intermediate Language). Le manifeste contient des métadonnées d'assembly: les exigences de version de l'assembly, l'identité de sécurité, les noms et les hachages de tous les fichiers qui composent l'assembly. IL contient des informations sur les classes, les constructeurs, la méthode principale, etc.

Gagan
la source
1

Les solutions Visual Studio consistent en un ou plusieurs projets. Par exemple: les projets de console peuvent produire un assemblage . Un assembly est logiquement un morceau de code qui peut être expédié aux clients et physiquement un .EXE (programme exécutable) ou .DLL (sont réutilisables par d'autres programmes).

Eldiyar Talantbek
la source
0

Les assemblys contiennent des informations sur le contenu, la gestion des versions 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.

C'est une collection de types et de ressources conçus pour fonctionner 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 constituent les blocs de construction des applications .NET. Ils fournissent au runtime de langage commun les informations dont il a besoin pour connaître les implémentations de type.

Chaque assembly possède un fichier manifeste d'assembly. Semblable à une table des matières, le manifeste d'assembly contient:

  • L'identité de l'assemblée (son nom et sa version).
  • Un tableau de fichiers décrivant tous les autres fichiers qui composent l'assembly, tels que les autres assemblys que vous avez créés sur lesquels votre fichier .exe ou .dll s'appuie, les fichiers bitmap ou les fichiers Lisezmoi.
  • Une liste de références d'assembly, qui est une liste de toutes les dépendances externes, telles que .dlls ou d'autres fichiers. Les références d'assembly contiennent des références aux objets globaux et privés. Dans .NET Framework, les objets globaux résident dans le Global Assembly Cache (GAC). System.IO.dll est un exemple d'un assembly dans le GAC. Les objets privés doivent se trouver dans un niveau de répertoire égal ou inférieur au répertoire dans lequel votre application est installée.

Pour utiliser un assembly dans une application, vous devez lui 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 accessibles de ses espaces de noms sont disponibles pour votre application comme si leur code faisait partie de votre fichier source.

Nous savons donc tous que notre code source est converti en langage intermédiaire Microsoft (MSIL). Au moment de l'exécution, CLR (Common Languge Runtime) convertit le MSIL en code natif avec le compilateur JIT. Avant de convertir le code MSIL doit passer un processus de vérification qui examine le MSIL + MetaData (nom des assemblys, version, références): pour savoir si le code peut être déterminé comme étant de type sécurisé. s'il passe la vérification, MSIL est converti en code natif. Toutes les méthodes appelées sont converties en langage machine et enregistrées dans le cache pour une utilisation ultérieure.

shiga soumya
la source