Qu'est-ce qu'un assembly en C # ou .NET exactement?

102

Pourriez-vous s'il vous plaît expliquer ce qu'est un Assembly en C # ou .NET?

  1. Où commence-t-il et où finit-il?
  2. Quelles informations importantes dois-je connaître sur les assemblages?
Roee Adler
la source
5
À proprement parler, un assembly n'est-il pas un concept .NET plutôt qu'un concept C #?
JeffH
14
@JeffH: quand j'ai posé la question, j'ai pensé que c'était un concept C #. Maintenant, je comprends que c'est un .NET. Néanmoins, puisque je pense que d'autres personnes peuvent être confuses comme moi, je ne l'ai pas intentionnellement changé pour que Google puisse tenir compte de cette erreur ...
Roee Adler

Réponses:

114

Un assembly est la sortie compilée de votre code, généralement une DLL, mais votre EXE est également un assembly. C'est la plus petite unité de déploiement pour tout projet .NET.

L'assembly contient généralement du code .NET en MSIL (langage Microsoft Intermediate) qui sera compilé en code natif («JITted» - compilé par le compilateur Just-In-Time) la première fois qu'il est exécuté sur une machine donnée. Ce code compilé sera également stocké dans l'assembly et réutilisé lors des appels suivants.

L'assembly peut également contenir des ressources telles que des icônes, des bitmaps, des tables de chaînes, etc. En outre, l'assembly contient également des métadonnées dans le manifeste de l'assembly - des informations telles que le numéro de version, le nom fort, la culture, les assemblys référencés, etc.

Dans 99% de vos cas, un assemblage équivaut à un fichier physique sur disque - le cas d'un assemblage multi-fichiers (un assemblage, réparti sur plus d'un seul fichier) semble être un cas plutôt étrange que j'ai jamais rencontré jusqu'à présent dans mes 5 ans et plus de développement .NET.

Dans un assembly multifichier, il y aurait toujours un seul manifeste d'assembly dans une DLL ou un EXE et le code MSIL dans plusieurs fichiers netmodule.

marc_s
la source
1
@marc_s: Je pense que vous voulez dire un fichier multi-assemblage. Il est possible de regrouper plusieurs assemblys dans un seul fichier via les outils de ligne de commande du studio, mais pas directement via l'EDI.
Greg D
5
Les métadonnées du manifeste d'assembly sont une chose très importante dans un assembly. Le manifeste contient des informations telles que la version, le nom fort, la culture, les assemblys référencés, etc. Dans un assembly multifichier, il n'y aurait toujours qu'un seul manifeste d'assembly dans une dll ou un exe et le code MSIL dans plusieurs fichiers .netmodule. Fondamentalement, un assemblage est une unité minimale de déploiement dans> net
softveda
@marc_s: J'apprécierais que vous ajoutiez le point de @ Pratik à la réponse, merci
Roee Adler
@rax: terminé; @pratik: maintenant vous me confondez: vous parlez encore d '"assemblage multi-fichier", alors que @GregD a mentionné que c'était vraiment un "fichier multi-assemblage" - qu'est-ce que c'est maintenant ?? (comme je l'ai dit - je n'ai jamais rencontré une telle bête, donc je ne sais pas si c'est plusieurs assemblages par fichier, ou plusieurs fichiers par assemblage ....)
marc_s
3
"Ce code compilé sera également stocké dans l'assembly et réutilisé lors des appels suivants." Ceci est trompeur et / ou pas très clair. Aucun code compilé n'est "stocké" dans un assembly. Je pense que vous faites peut-être référence à la façon dont chaque méthode / fonction est "jitted" dans le code natif lors de son premier appel. Ensuite, pendant que l'assembly est en mémoire, la version du code natif de la méthode est appelée. Si l'assembly est déchargé, puis rechargé plus tard, le processus jit se reproduira à nouveau. Bien sûr, cela suppose que vous n'utilisez pas NGEN pour pré-compiler vos assemblys en code natif (non recommandé).
Ash
13

Assemblage .NET

Dans le framework Microsoft .NET, un assembly est une bibliothèque de code partiellement compilée à utiliser dans le déploiement, le contrôle de version et la sécurité.


la source
7

http://www.codeguru.com/columns/csharp_learning/article.php/c5845

Un assembly est un fichier qui est automatiquement généré par le compilateur lors de la compilation réussie de chaque application .NET. Il peut s'agir d'une bibliothèque de liens dynamiques ou d'un fichier exécutable. Il n'est généré qu'une seule fois pour une application et à chaque compilation suivante, l'assembly est mis à jour.

Raghav
la source
2
Les assemblys sont distincts des fichiers qui les contiennent.
Greg D
1
@Raghav - Mettez à jour votre photo avec quelque chose de décontracté pour l'amour du ciel! On ne pose pas ici pour des passeports, tu sais!
TheFlash
3

Voici une autre explication de la composition des assemblys .NET, un mini-devis:

Le framework .NET se compose des concepts de modules, d'assemblys, qui stockent à la fois des métadonnées et des informations de manifeste. Un assemblage peut contenir plusieurs modules. Visual C # ne crée qu'un seul module qui est transformé en assembly par le compilateur C # (csc.exe), mais un assembly peut lier plusieurs modules .NET ensemble via l'outil de ligne de commande Assembly Linker (al.exe). Par exemple, chacun de vos fichiers .cs de code source pourrait être compilé dans un module et lié pour former un assembly - un assembly est juste une collection de modules et de ressources. L'un de ces modules, cependant; doit contenir des informations de métadonnées manifestes (voir ci-dessous) pour que l'assembly soit compris par le CLR.
....
Après avoir créé un nouveau .exe ou .dll dans VS.NET, votre fichier apparaît dans votre dossier bin. L'ouvrir dans le bloc-notes donnera du charabia, ou même dans un éditeur hexadécimal sans connaître la structure du fichier, vous avez besoin d'un outil comme ildasm.exe ou CFF Explorer pour en donner un sens. La structure de l'assemblage est la suivante:

En-tête PE En-
tête
CLR Métadonnées
CLR
Code IL CLR
Données natives

Chris S
la source
Où diable ce lien me mène-t-il? Sorte de redirections infinies! Après quelques réoriente il m'a fallu une page qui dit cela . Aucun moyen d'obtenir l'URL que vous avez publiée non plus.
Sнаđошƒаӽ
2

La réponse est pour une saisie immédiate.

En termes simples, c'est le projet compilé impliquant vos classes et des fichiers supplémentaires, s'il y en a. Autrement dit, chaque projet d'une solution est un assemblage .

Ou plus techniquement,

Un assembly est l'endroit où un type est stocké dans le système de fichiers. Les assemblys sont un mécanisme de déploiement de code. Par exemple, l' System.Data.dll assembly contient des types de gestion des données. Pour utiliser des types dans d'autres assemblys, ils doivent être référencés. - Source

comment le savons-nous? Si vous regardez les propriétés d'un projet sous la solution, vous pouvez voir les images suivantes.

Lorsque vous compilez le projet, il s'avère que DLL ou EXE .

entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici

snr
la source
1

Lorsqu'un code source est compilé par le compilateur de langage , il Générer un assembly managé et MSIL (MisroSoft Intermediate Language). Cet assemblage contient un fichier .dll ou .exe . Un Assebmly peut être de deux types Private Assembly et Shared Assembly , l' assembly partagé est stocké dans GAC (Global Assembly Cache) afin que toute application puisse s'y référer tandis que l'assembly privé est stocké dans le dossier d'application qui ne peut être utilisé que par une seule application.

gaurav patni
la source
0

Un assembly est une DLL ou un EXE qui sera créé lorsque vous le publiez ou compilerez votre application.

Anup Shetty
la source
0

Un assemblage est une collection d'unités logiques. Les unités logiques font référence aux types et aux ressources nécessaires pour créer une application et les déployer à l'aide du framework .Net. Fondamentalement, Assembly est une collection d'Exe et de DLL. Il est portable et exécutable.

Abhay.Patil
la source
-1

Après avoir écrit le code source de votre programme (projet), un fichier est créé qui peut être DLL ou EXE dépend de votre projet. Cela ne fait qu'une seule fois pour un seul projet. Il a deux types 1: - simple 2: - ensemble unique partagé ou multiprogramme utilisé uniquement dans un seul programme tandis que partagé peut être utilisé pour multiprogramme

kirti kant pareek
la source
Après avoir écrit le code source de votre programme (projet), un fichier est créé qui peut être DLL ou EXE dépend de votre projet - après avoir écrit le code source? Cela ne semble pas être une très bonne indication du moment où ce fichier est créé, ce qui est sans importance compte tenu de la question.
Sнаđошƒаӽ