Was genau ist eine Assembly in C # oder .NET?


101

Könnten Sie bitte erklären, was eine Assembly in C # oder .NET ist?

  1. Wo beginnt es und wo endet es?
  2. Welche wichtigen Informationen sollte ich über Baugruppen wissen?

5
Ist eine Assembly genau genommen kein .NET-Konzept und kein C # -Konzept?
JeffH

14
@ JeffH: Als ich die Frage stellte, dachte ich, es sei ein C # -Konzept. Jetzt verstehe ich, dass es ein .NET ist. Da ich jedoch denke, dass andere Leute so verwirrt sein könnten wie ich, habe ich es absichtlich nicht geändert, damit Google diesen Fehler
berücksichtigt

Antworten:


114

Eine Assembly ist die kompilierte Ausgabe Ihres Codes, normalerweise eine DLL, aber Ihre EXE-Datei ist auch eine Assembly. Es ist die kleinste Bereitstellungseinheit für jedes .NET-Projekt.

Die Assembly enthält normalerweise .NET-Code in MSIL (Microsoft Intermediate Language), der bei der ersten Ausführung auf einem bestimmten Computer zu nativem Code ("JITted" - vom Just-In-Time-Compiler kompiliert) kompiliert wird. Dieser kompilierte Code wird auch in der Assembly gespeichert und bei nachfolgenden Aufrufen wiederverwendet.

Die Assembly kann auch Ressourcen wie Symbole, Bitmaps, Zeichenfolgentabellen usw. enthalten. Darüber hinaus enthält die Assembly auch Metadaten im Assemblymanifest - Informationen wie Versionsnummer, starker Name, Kultur, Assemblys, auf die verwiesen wird usw.

In 99% Ihrer Fälle entspricht eine Baugruppe einer physischen Datei auf der Festplatte - der Fall einer Baugruppe mit mehreren Dateien (eine Baugruppe, die auf mehr als eine einzelne Datei verteilt ist) scheint ein ziemlich seltsamer Fall zu sein Noch nie in meiner mehr als 5-jährigen .NET-Entwicklung angetroffen.

In einer Multifile-Assembly gibt es immer noch nur ein Assembly-Manifest in einer DLL oder EXE und den MSIL-Code in mehreren Netmodul-Dateien.


1
@marc_s: Ich denke du meinst eine Multi-Assembly-Datei. Es ist möglich, mehrere Assemblys in einer einzigen Datei über die Befehlszeilentools von Studio zu verpacken, jedoch nicht direkt über die IDE.
Greg D

5
Eine sehr wichtige Sache in einer Assembly sind die Metadaten im Assemblymanifest. Das Manifest enthält Informationen wie Version, starker Name, Kultur, Assemblys, auf die verwiesen wird usw. In einer Multifile-Assembly gibt es immer noch nur ein Assemblymanifest in einer DLL oder Exe und den MSIL-Code in mehreren .netmodule-Dateien. Grundsätzlich ist eine Baugruppe die minimale Bereitstellungseinheit in> net
softveda

@marc_s: Ich würde es begrüßen, wenn Sie @ Pratiks Punkt zur Antwort hinzufügen, danke
Roee Adler

@rax: fertig; @pratik: Jetzt verwirren Sie mich: Sie sprechen wieder von "Multi-Assembly", während @GregD erwähnte, dass es sich wirklich um eine "Multi-Assembly-Datei" handelt - was ist das jetzt? (Wie gesagt - ich bin noch nie einem solchen Tier begegnet, daher bin ich mir nicht
sicher

3
"Dieser kompilierte Code wird auch in der Assembly gespeichert und bei nachfolgenden Aufrufen wiederverwendet." Dies ist irreführend und / oder nicht sehr klar. In einer Assembly wird kein kompilierter Code "gespeichert". Ich denke, Sie beziehen sich möglicherweise auf die Art und Weise, wie jede Methode / Funktion beim ersten Aufruf an nativen Code "angepasst" wird. Während sich die Assembly im Speicher befindet, wird die native Codeversion der Methode aufgerufen. Wenn die Baugruppe entladen und später neu geladen wird, wird der JIT-Prozess erneut ausgeführt. Dies setzt natürlich voraus, dass Sie NGEN nicht zum Vorkompilieren Ihrer Assemblys zu nativem Code verwenden (nicht empfohlen).
Ash

13

.NET-Assembly

In Microsoft .NET Framework ist eine Assembly eine teilweise kompilierte Codebibliothek zur Verwendung bei Bereitstellung, Versionierung und Sicherheit.


7

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

Eine Assembly ist eine Datei, die vom Compiler nach erfolgreicher Kompilierung jeder .NET-Anwendung automatisch generiert wird. Dies kann entweder eine Dynamic Link Library oder eine ausführbare Datei sein. Es wird nur einmal für eine Anwendung generiert und bei jeder nachfolgenden Kompilierung wird die Assembly aktualisiert.


2
Baugruppen unterscheiden sich von den Dateien, die sie enthalten.
Greg D

1
@Raghav - Aktualisiere dein Foto mit etwas Lässigem um Himmels willen! Wir posieren hier nicht für Pässe, wissen Sie!
TheFlash

3

Hier ist eine weitere Erklärung der Zusammensetzung von .NET-Baugruppen, ein Mini-Zitat:

Das .NET Framework besteht aus den Konzepten von Modulen und Assemblys, die sowohl Metadaten als auch Manifestinformationen speichern. Eine Baugruppe kann mehrere Module enthalten. Visual C # erstellt immer nur ein Modul, das vom C # -Compiler (csc.exe) in eine Assembly umgewandelt wird. Eine Assembly kann jedoch viele .NET-Module über das Befehlszeilentool Assembly Assemblyer (al.exe) miteinander verknüpfen. Zum Beispiel könnte jede Ihrer Quellcode-CS-Dateien zu einem Modul kompiliert und zu einer Assembly verknüpft werden - eine Assembly ist nur eine Sammlung von Modulen und Ressourcen. Eines dieser Module jedoch; muss Manifest-Metadaten (siehe unten) enthalten, damit die Assembly von der CLR verstanden wird.
....
Nachdem Sie in VS.NET eine neue EXE- oder DLL-Datei erstellt haben, wird Ihre Datei in Ihrem bin-Ordner angezeigt. Wenn Sie es im Editor öffnen, wird Kauderwelsch ausgegeben, oder sogar in einem hexadezimalen Editor, ohne die Struktur der Datei zu kennen. Sie benötigen ein Tool wie ildasm.exe oder den CFF-Explorer, um daraus einen Sinn zu machen. Die Struktur der Baugruppe ist wie folgt:

PE-Header
CLR-Header
CLR-Metadaten
CLR
IL-Code
Native Daten


Wo zum Teufel führt mich dieser Link hin? Art von unendlichen Weiterleitungen! Nach einigen Weiterleitungen gelangte ich zu einer Seite, auf der dies steht . Es gibt auch keine Möglichkeit, die von Ihnen gepostete URL original zu erhalten.
Sнаđошƒаӽ

2

Die Antwort ist zum sofortigen Erfassen angebracht.

Einfach ausgedrückt handelt es sich um das kompilierte Projekt, an dem Ihre Klassen und gegebenenfalls zusätzliche Dateien beteiligt sind. Das heißt, jedes Projekt in einer Lösung ist eine Baugruppe .

Oder technisch gesehen,

In einer Baugruppe wird ein Typ im Flesystem gespeichert. Assemblies sind ein Mechanismus zum Bereitstellen von Code. Beispielsweise System.Data.dll enthält die Assembly Typen zum Verwalten von Daten. Um Typen in anderen Assemblys verwenden zu können, muss auf sie verwiesen werden. - Quelle

Woher wissen wir das? Wenn Sie sich die Eigenschaften eines Projekts unter der Lösung ansehen, sehen Sie die folgenden Bilder.

Wenn Sie das Projekt kompilieren, wird es zu DLL oder EXE .

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein


1

Wenn ein Quellcode vom Sprachcompiler kompiliert wird, generiert er eine verwaltete Assembly und MSIL (MisroSoft Intermediate Language). Diese Assembly enthält eine DLL- oder EXE-Datei . Eine Assebmly kann von zwei Arten sein: Private Assembly und Shared Assembly . Shared Assembly wird im GAC (Global Assembly Cache) gespeichert, sodass jede Anwendung darauf verweisen kann, während Private Assembly im Anwendungsordner gespeichert wird, der nur von einer Anwendung verwendet werden kann.


0

Eine Assembly ist eine DLL oder eine EXE-Datei, die erstellt wird, wenn Sie sie veröffentlichen oder Ihre Anwendung kompilieren.


0

Eine Assembly ist eine Sammlung logischer Einheiten. Logische Einheiten beziehen sich auf die Typen und Ressourcen, die zum Erstellen und Bereitstellen einer Anwendung mithilfe des .NET-Frameworks erforderlich sind. Grundsätzlich ist Assembly eine Sammlung von Exe- und DLLs. Es ist portabel und ausführbar.


-1

Nach dem Schreiben des Quellcodes Ihres Programms (Projekts) wird eine Datei erstellt, die je nach Projekt DLL oder EXE sein kann. Es macht nur einmal für ein einzelnes Projekt. Es gibt zwei Typen 1: - Single 2: - Shared oder Multiprogramm Single Assembly, die nur in einem einzigen Programm verwendet wird, während Shared für Multiprogramm verwendet werden kann


Nach dem Schreiben des Quellcodes Ihres Programms (Projekts) wird eine Datei erstellt, die je nach Projekt DLL oder EXE sein kann - nach dem Schreiben des Quellcodes? Scheint kein sehr guter Hinweis darauf zu sein, wann diese Datei erstellt wird, was angesichts der Frage übrigens unerheblich ist.
Sнаđошƒаӽ
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.