Was sind .NET-Assemblys?

193

Was sind .NET-Assemblys? Ich habe über das Internet geblättert und kann die Definition nicht verstehen.

Massyle Djama
quelle
11
Lesen Sie CLR Via C # . Sie werden am Ende alles darüber wissen. Ich kann dieses Buch nur empfehlen.
David Neale

Antworten:

169

Einfacher ausgedrückt: Ein Teil des (vorkompilierten) Codes, der von der .NET-Laufzeitumgebung ausgeführt werden kann. Ein .NET-Programm besteht aus einer oder mehreren Assemblys.

Adrian Grigore
quelle
30
@KimJongWoo - Nein, eine Jar-Datei ist nur eine Zip-Datei, die kompilierte Bytecode-Dateien enthält. Eine Assembly ist eine PE-Datei (Portable Executable Format) (dh eine DLL oder EXE), aber konzeptionell dienen sie ähnlichen Zwecken.
Erik Funkenbusch
Es ist also wie eine .classDatei in der Java-Welt?
mljrg
245

Assembly ist die kleinste Bereitstellungseinheit einer .net-Anwendung. Es kann eine DLL oder eine Exe sein .
Es gibt hauptsächlich zwei Arten:

  1. Private Assembly: Die DLL oder Exe, die alleiniges Eigentum einer Anwendung ist. Es wird im Allgemeinen im Anwendungsstammordner gespeichert

  2. Öffentliche / freigegebene Assembly: Dies ist eine DLL, die von mehreren Anwendungen gleichzeitig verwendet werden kann. Eine gemeinsam genutzte Assembly wird im GAC gespeichert, dh im globalen Assemblycache .

Klingt schwierig? Naa ....
GAC ist einfach der Ordner C: \ Windows \ Assembly, in dem Sie die öffentlichen Assemblys / DLLs aller auf Ihrem PC installierten Software finden.

Es gibt auch einen dritten und am wenigsten bekannten Typ einer Baugruppe: Satellitenbaugruppe .
Eine Satellitenassembly enthält nur statische Objekte wie Bilder und andere nicht ausführbare Dateien, die von der Anwendung benötigt werden.

Hoffe das hilft den Lesern!

Mangeshkt
quelle
3
Beachten Sie, dass der Speicherort für .NET 4.0 unterschiedlich ist: stackoverflow.com/questions/2660355/net-4-0-has-a-new-gac-why
TrueWill
das könnte langsam werden. Nachdem ein Ordner tausend davon erhalten hat, wird Windows langsamer, wenn es versucht, den Verzeichnisbaum zu durchsuchen oder einfach das Verzeichnis zu lesen.
Jim Michaels
@mangeshkt - Ist es möglich, die DLL einer Anwendung zu kopieren und in das Stammverzeichnis einer anderen zu kopieren? Kann ich die Funktionalität der ersten verwenden?
Shivam657
57

Baugruppen

Wenn Sie eine Anwendung kompilieren, wird der erstellte MSIL-Code in einer Assembly gespeichert. Zu den Assemblies gehören sowohl ausführbare Anwendungsdateien, die Sie direkt unter Windows ausführen können, ohne dass andere Programme erforderlich sind (diese haben die Dateierweiterung .exe), als auch Bibliotheken (die die Erweiterung .dll haben), die von anderen Anwendungen verwendet werden können.

Assemblys enthalten nicht nur MSIL, sondern auch Metainformationen (dh Informationen zu den in der Assembly enthaltenen Informationen, auch als Metadaten bezeichnet) und optionale Ressourcen (zusätzliche Daten, die von MSIL verwendet werden, z. B. Audiodateien und Bilder). Mithilfe der Metainformationen können Assemblys vollständig selbstbeschreibend sein. Sie benötigen keine weiteren Informationen, um eine Assembly zu verwenden. Dies bedeutet, dass Sie Situationen vermeiden, in denen die Systemregistrierung nicht mit den erforderlichen Daten versehen werden kann. Dies war häufig ein Problem bei der Entwicklung mit anderen Plattformen.

Dies bedeutet, dass das Bereitstellen von Anwendungen häufig so einfach ist wie das Kopieren der Dateien in ein Verzeichnis auf einem Remotecomputer. Da auf den Zielsystemen keine zusätzlichen Informationen erforderlich sind, können Sie einfach eine ausführbare Datei aus diesem Verzeichnis ausführen und (vorausgesetzt, die .NET-CLR ist installiert) können Sie loslegen.

Natürlich möchten Sie nicht unbedingt alles, was zum Ausführen einer Anwendung erforderlich ist, an einem Ort enthalten. Möglicherweise schreiben Sie Code, der Aufgaben ausführt, die von mehreren Anwendungen benötigt werden. In solchen Situationen ist es oft nützlich, den wiederverwendbaren Code an einem Ort zu platzieren, auf den alle Anwendungen zugreifen können. In .NET Framework ist dies der Global Assembly Cache (GAC). Das Platzieren von Code im GAC ist einfach: Sie platzieren einfach die Assembly mit dem Code in dem Verzeichnis, das diesen Cache enthält.

Saleh
quelle
Zur besseren Übersicht "Wenn Sie eine Anwendung kompilieren, wird der erstellte MSIL-Code in einer Assembly gespeichert." Nur um den Inhalt einer Baugruppe anzuzeigen, können Sie ILSPY verwenden.
Sandeep
33

Eine Assembly ist die eigentliche DLL-Datei auf Ihrer Festplatte, in der die Klassen in .NET Framework gespeichert sind. Beispielsweise befinden sich alle in ASP.NET Framework enthaltenen Klassen in einer Assembly mit dem Namen System.Web.dll.

Genauer gesagt ist eine Assembly die primäre Einheit für Bereitstellung, Sicherheit und Versionskontrolle in .NET Framework. Da eine Assembly mehrere Dateien umfassen kann, wird eine Assembly häufig als "logische" DLL bezeichnet.

Hinweis

Das .NET Framework (Version 2.0) enthält 51 Assemblys.

Es gibt zwei Arten von Assemblys: private und gemeinsam genutzte. Eine private Assembly kann nur von einer einzigen Anwendung verwendet werden. Eine gemeinsam genutzte Assembly kann hingegen von allen Anwendungen auf demselben Server verwendet werden.

Freigegebene Assemblys befinden sich im Global Assembly Cache (GAC). Beispielsweise befinden sich die System.Web.dll-Assembly und alle anderen in .NET Framework enthaltenen Assemblys im globalen Assemblycache.

Hinweis

Der globale Assemblycache befindet sich physisch im Ordner \ WINDOWS \ Assembly Ihres Computers. In Ihrem Ordner \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 befindet sich für jede Assembly eine separate Kopie. Der erste Satz von Assemblys wird zur Laufzeit und der zweite Satz zur Kompilierungszeit verwendet.

Bevor Sie eine in einer Assembly enthaltene Klasse in Ihrer Anwendung verwenden können, müssen Sie einen Verweis auf die Assembly hinzufügen. Standardmäßig verweist eine ASP.NET-Anwendung auf die am häufigsten im globalen Assemblycache enthaltenen Assemblys:

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

Um eine bestimmte Klasse in .NET Framework zu verwenden, müssen Sie zwei Dinge tun. Zunächst muss Ihre Anwendung auf die Assembly verweisen, die die Klasse enthält. Zweitens muss Ihre Anwendung den der Klasse zugeordneten Namespace importieren.

In den meisten Fällen müssen Sie nicht auf die erforderliche Assembly verweisen, da die gängigsten Assemblys automatisch referenziert werden. Wenn Sie jedoch eine spezielle Baugruppe verwenden müssen, müssen Sie der Baugruppe explizit einen Verweis hinzufügen. Wenn Sie beispielsweise mithilfe der Klassen im System.DirectoryServices-Namespace mit Active Directory interagieren müssen, müssen Sie Ihrer Anwendung einen Verweis auf die Assembly System.DirectoryServices.dll hinzufügen.

Jeder Klasseneintrag in der .NET Framework SDK-Dokumentation listet die der Klasse zugeordnete Assembly und den Namespace auf. Wenn Sie beispielsweise die MessageQueue-Klasse in der Dokumentation nachschlagen, werden Sie feststellen, dass sich diese Klasse im System.Messaging-Namespace in der System.Messaging.dll-Assembly befindet.

Wenn Sie Visual Web Developer verwenden, können Sie einen Verweis explizit zu einer Assembly hinzufügen, indem Sie die Menüoption Website, Verweis hinzufügen und den Namen der Assembly auswählen, auf die Sie verweisen müssen. Wenn Sie beispielsweise einen Verweis auf die Assembly System.Messaging.dll hinzufügen, wird die Webkonfigurationsdatei in Listing 1.4 zu Ihrer Anwendung hinzugefügt.

Z.B. Web.Config

enter code here

Wenn Sie Visual Web Developer nicht verwenden möchten, können Sie den Verweis auf die Assembly System.Messaging.dll hinzufügen, indem Sie die Datei im obigen Beispiel manuell erstellen

Hung Vu
quelle
1
Viel technischer als die akzeptierte Antwort sollte dies die akzeptierte Antwort sein.
sparkyShorts
8

Wikipedia muss sagen:

In Microsoft .NET Framework ist eine Assembly eine teilweise kompilierte Codebibliothek zur Verwendung bei Bereitstellung, Versionierung und Sicherheit. Es gibt zwei Arten: Prozessassemblies (EXE) und Bibliotheksassemblies (DLL). Eine Prozessassembly stellt einen Prozess dar, der Klassen verwendet, die in Bibliotheksassemblys definiert sind. .NET-Assemblys enthalten Code in CIL, der normalerweise aus einer CLI-Sprache generiert und dann zur Laufzeit vom CLR-Just-in-Time-Compiler in die Maschinensprache kompiliert wird. Eine Assembly kann aus einer oder mehreren Dateien bestehen. Codedateien werden Module genannt. Eine Assembly kann mehr als ein Codemodul enthalten. Da es möglich ist, verschiedene Sprachen zum Erstellen von Codemodulen zu verwenden, ist es technisch möglich, mehrere verschiedene Sprachen zum Erstellen einer Assembly zu verwenden.

Wenn Sie wirklich stöbern würden, wäre es hilfreich, wenn Sie klären würden, was Sie nicht verstehen

Christina Mayers
quelle
7

Siehe dies :

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

Anton Gogolev
quelle
7

physische Sammlung von Klasse, Schnittstelle, Aufzählung usw., die im IL-Code enthalten ist. Dies kann eine EXE- oder DLL-Datei sein. EXE ist eine ausführbare Datei, und DLL kann dynamisch in jeder von .net unterstützten Sprache verwendet werden.

Govind Malviya
quelle
6

Eine Assembly ist eine Laufzeiteinheit, die aus Typen und anderen Ressourcen besteht. Alle Typen in einer Baugruppe haben dieselbe Versionsnummer.

Oft hat eine Assembly nur einen Namespace und wird von einem Programm verwendet. Es kann sich jedoch über mehrere Namespaces erstrecken. Ein Namespace kann sich auch auf mehrere Assemblys verteilen. Bei großen Designs kann eine Assembly aus mehreren Dateien bestehen, die von einem Manifest (dh einem Inhaltsverzeichnis) zusammengehalten werden.

In C # ist eine Assembly die kleinste Bereitstellung einer .NET-Anwendung. Es kann sich um eine DLL oder eine Exe handeln. Es gibt zwei Typen: 1. Private Assembly 2. Öffentliche / freigegebene Assembly

Abhishek Singh
quelle
6

Neben der akzeptierten Antwort möchte ich Ihnen ein Beispiel geben!

Zum Beispiel verwenden wir alle

System.Console.WriteLine()

Aber wo ist der Code für System.Console.WriteLine!?
Welcher Code bringt den Text tatsächlich auf die Konsole?

Wenn Sie sich die erste Seite der Dokumentation für die Console-Klasse ansehen, sehen Sie oben Folgendes: Assembly: mscorlib (in mscorlib.dll) Dies zeigt an, dass sich der Code für die Console-Klasse in einer Assembly befindet genannt mscorlib. Eine Assembly kann aus mehreren Dateien bestehen. In diesem Fall handelt es sich jedoch nur um eine Datei. Dies ist die dynamische Linkbibliothek mscorlib.dll.

Die Datei mscorlib.dll ist in .NET sehr wichtig. Sie ist die Haupt-DLL für Klassenbibliotheken in .NET und enthält alle grundlegenden .NET-Klassen und -Strukturen.

Wenn Sie C oder C ++ kennen, benötigen Sie im Allgemeinen oben eine # include-Direktive, die auf eine Header-Datei verweist. Die Include-Datei stellt dem Compiler Funktionsprototypen zur Verfügung. Im Gegensatz dazu benötigt der C # -Compiler keine Header-Dateien. Während der Kompilierung greift der C # -Compiler direkt auf die Datei mscorlib.dll zu und erhält aus den Metadaten in dieser Datei Informationen zu allen darin definierten Klassen und anderen Typen.

Der C # -Compiler kann feststellen, dass mscorlib.dll tatsächlich eine Klasse namens Console in einem Namespace namens System mit einer Methode namens WriteLine enthält, die ein einzelnes Argument vom Typ string akzeptiert.

Der C # -Compiler kann feststellen, dass der WriteLine-Aufruf gültig ist, und der Compiler erstellt einen Verweis auf die mscorlib-Assembly in der ausführbaren Datei.

Standardmäßig greift der C # -Compiler auf mscorlib.dll zu. Bei anderen DLLs müssen Sie dem Compiler jedoch mitteilen, in welcher Assembly sich die Klassen befinden. Diese werden als Referenzen bezeichnet.

Ich hoffe, dass es jetzt klar ist!

Von DotNetBookZero Charles Pitzold

Ahmed KhaShaba
quelle
5

MSDN hat eine gute Erklärung :

Assemblys sind die Bausteine ​​von .NET Framework-Anwendungen. Sie bilden die grundlegende Einheit für Bereitstellung, Versionskontrolle, Wiederverwendung, Aktivierungsbereich und Sicherheitsberechtigungen. Eine Assembly ist eine Sammlung von Typen und Ressourcen, die zusammenarbeiten und eine logische Funktionseinheit bilden. Eine Assembly stellt der Common Language Runtime die Informationen zur Verfügung, die sie für Typimplementierungen benötigt. Zur Laufzeit existiert ein Typ nicht außerhalb des Kontexts einer Assembly.

Matt Warren
quelle
4

Eine Assembly ist eine Sammlung von Typen und Ressourcen, die eine logische Funktionseinheit bilden. Alle Typen in .NET Framework müssen in Assemblys vorhanden sein. Die Common Language Runtime unterstützt keine Typen außerhalb von Assemblys. Jedes Mal, wenn Sie eine Microsoft Windows®-Anwendung, einen Windows-Dienst, eine Klassenbibliothek oder eine andere Anwendung mit Visual Basic .NET erstellen, erstellen Sie eine einzelne Assembly. Jede Assembly wird als EXE- oder DLL-Datei gespeichert.

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

Für diejenigen mit Java-Hintergrund wie mich hoffe ich, dass das folgende Diagramm Konzepte verdeutlicht -

Assemblies sind wie JAR-Dateien (die mehrere .class-Dateien enthalten). Ihr Code kann auf eine vorhandene Assembly verweisen, oder Sie können den Code selbst als Assembly veröffentlichen, damit anderer Code auf ihn verweisen und ihn verwenden kann (Sie können dies als JAR-Dateien in Java betrachten, die Sie in Ihre Projektabhängigkeiten einfügen können).

Am Ende des Tages ist eine Assembly ein kompilierter Code, der auf jedem Betriebssystem mit installierter CLR ausgeführt werden kann. Dies entspricht der Aussage, dass .class-Dateien oder gebündelte JARs auf jedem Computer mit installierter JVM ausgeführt werden können.

Geben Sie hier die Bildbeschreibung ein

Aniket Thakur
quelle
2

In .Net, eine Baugruppe kann sein:

Eine Sammlung von verschiedenen handhabbaren Haltige Teilen Types (or Classes), Resources (Bitmaps/Images/Strings/Files), Namespaces, Config Fileskompilierte Privatelyoder Publicly; in einem localoder Shared (GAC)Ordner bereitgestellt ; discover-ablevon anderen programs/assembliesund; kann versioniert werden.

VS1
quelle
2

Da Assembly die kleinste Einheit für Versionssicherheit, Bereitstellung und Wiederverwendbarkeit von Code in Microsoft.Net ist.

Es beinhaltet:

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

Assembly ist der grundlegende Teil der Programmierung mit .NET Framework. Es enthält Code, den CLR ausführt. MSIL-Code (Microsoft Intermediate Language) in einer tragbaren ausführbaren Datei wird nicht ausgeführt, wenn ihm kein Assembly-Manifest zugeordnet ist.

Kamini Joshi
quelle
1

.NET-Anwendungen werden durch Zusammensetzen einer beliebigen Anzahl von Assemblys erstellt. Einfach ausgedrückt ist eine Assembly nichts anderes als eine versionierte, selbstbeschreibende Binärdatei (DLL oder EXE), die eine Sammlung von Typen (Klassen, Schnittstellen, Strukturen usw.) und optionalen Ressourcen (Bilder, Zeichenfolgentabellen und so weiter) enthält. Eine Sache, die Sie im Moment schmerzlich beachten sollten, ist, dass die interne Organisation einer .NET-Assembly nichts mit der internen Organisation eines klassischen COM-Servers zu tun hat (unabhängig von den gemeinsam genutzten Dateierweiterungen).

Shivam Sharma
quelle
1

Wenn wir in .NET unseren Quellcode kompilieren, wird die Assembly in Visual Studio generiert. Die Versammlung besteht aus zwei Teilen Manifest und IL (Intermediate Language). Manifest enthält Assembly-Metadaten bedeutet Versionsanforderungen, Sicherheitsidentität, Namen und Hashes aller Dateien, aus denen die Assembly besteht. IL enthält Informationen zu Klassen, Konstruktoren, Hauptmethoden usw.

Gagan
quelle
1

Visual Studio- Lösungen bestehen aus einem oder mehreren Projekten. Zum Beispiel: Konsolenprojekte können eine Baugruppe erstellen . Eine Assembly ist logisch ein Teil des Codes, der an Kunden gesendet werden kann, und physisch eine .EXE (ausführbares Programm) oder .DLL (können von anderen Programmen wiederverwendet werden).

Eldiyar Talantbek
quelle