Freigeben über


Assemblys in .NET

Assemblys sind die grundlegenden Einheiten der Bereitstellung, Versionssteuerung, Wiederverwendung, Aktivierungsdefinition und Sicherheitsberechtigungen für . NET-basierte Anwendungen. Eine Assembly ist eine Sammlung von Typen und Ressourcen, die für die Zusammenarbeit und die Erstellung einer logischen Funktionalitätseinheit erstellt werden. Assemblys bilden ausführbare Dateien (.exe) oder Dynamic Link Library (.dll) und sind die Bausteine von .NET-Anwendungen. Sie stellen die Common Language Runtime mit den Informationen bereit, die sie kennen muss, um Typenimplementierungen zu kennen.

In .NET und .NET Framework können Sie eine Assembly aus einer oder mehreren Quellcodedateien erstellen. In .NET Framework können Assemblys ein oder mehrere Module enthalten. Auf diese Weise können größere Projekte geplant werden, sodass mehrere Entwickler an separaten Quellcodedateien oder Modulen arbeiten können, die kombiniert werden, um eine einzelne Assembly zu erstellen. Weitere Informationen zu Modulen finden Sie unter How to: Build a multifile assembly.

Assemblys weisen die folgenden Eigenschaften auf:

  • Assemblys werden als .exe - oder .dll-Dateien implementiert.

  • Für Bibliotheken, die auf .NET Framework abzielen, können Sie Assemblys zwischen Anwendungen freigeben, indem Sie sie im globalen Assemblycache (GAC) ablegen. Sie müssen Assemblys mit starkem Namen verwenden, bevor Sie sie in das GAC einschließen können. Weitere Informationen finden Sie unter Assemblys mit starkem Namen.

  • Assemblys werden nur in den Arbeitsspeicher geladen, wenn sie erforderlich sind. Wenn sie nicht verwendet werden, werden sie nicht geladen. Daher können Assemblys eine effiziente Möglichkeit zum Verwalten von Ressourcen in größeren Projekten sein.

  • Mithilfe der Spiegelung können Sie programmgesteuert Informationen zu einer Assembly abrufen. Weitere Informationen finden Sie unter Reflection (C#) oder Reflection (Visual Basic).

  • Sie können eine Assembly laden, um sie zu prüfen, indem Sie die MetadataLoadContext Klasse unter .NET und .NET Framework verwenden. MetadataLoadContext ersetzt die Assembly.ReflectionOnlyLoad Methoden.

Assemblys in der Common Language Runtime

Assemblys stellen die Common Language Runtime mit den Informationen bereit, die sie kennen müssen, um Typenimplementierungen zu berücksichtigen. Für die Laufzeit ist ein Typ außerhalb des Kontexts einer Assembly nicht vorhanden.

Eine Assembly definiert die folgenden Informationen:

  • Code , der von der Common Language Runtime ausgeführt wird. Jede Assembly kann nur einen Einstiegspunkt haben: DllMain, , WinMain, oder Main.

  • Die Sicherheitsgrenze. Eine Assembly ist die Einheit, für die Berechtigungen angefordert und erteilt werden. Weitere Informationen zu Sicherheitsgrenzen in Assemblys finden Sie unter Überlegungen zur Assemblysicherheit.

  • Die Typgrenze. Die Identität jedes Typs enthält den Namen der Assembly, in der sie sich befindet. Ein Typ, MyType der im Bereich einer Assembly geladen wird, entspricht nicht dem Typ, der im MyType Bereich einer anderen Assembly geladen wird.

  • Die Grenze für den Referenzbereich: Das Assemblymanifest verfügt über Metadaten, die zum Auflösen von Typen und Erfüllen von Ressourcenanforderungen verwendet werden. Das Manifest gibt die Typen und Ressourcen an, die außerhalb der Assembly verfügbar gemacht werden sollen, und listet andere Assemblys auf, von denen es abhängt. Common Intermediate Language (CIL)-Code in einer portablen ausführbaren Datei (PORTABLE Executable, PE) wird nur ausgeführt, wenn sie über ein zugeordnetes Assemblymanifest verfügt.

  • Die Versionsgrenze. Die Assembly ist die kleinste versionierbare Einheit in der Common Language Runtime. Alle Typen und Ressourcen in derselben Assembly werden als Einheit versioniert. Das Assemblymanifest beschreibt die Versionsabhängigkeiten, die Sie für abhängige Assemblys angeben. Weitere Informationen zur Versionsverwaltung finden Sie unter Assemblyversionsverwaltung.

  • Die Bereitstellungseinheit: Wenn eine Anwendung gestartet wird, müssen nur die Assemblys vorhanden sein, die die Anwendung anfänglich aufruft. Andere Assemblys, z. B. Assemblys, die Lokalisierungsressourcen oder Hilfsklassen enthalten, können bei Bedarf abgerufen werden. Mit diesem Prozess können Apps beim ersten Herunterladen einfach und dünn sein. Weitere Informationen zum Bereitstellen von Assemblys finden Sie unter Bereitstellen von Anwendungen.

  • Eine parallele Ausführungseinheit: Weitere Informationen zum Ausführen mehrerer Versionen einer Assembly finden Sie unter Assemblys und parallele Ausführung.

Erstellen einer Assembly

Assemblys können statisch oder dynamisch sein. Statische Assemblys werden auf einem Datenträger in PE-Dateien (portable ausführbare Dateien) gespeichert. Statische Assemblys können Schnittstellen, Klassen und Ressourcen wie Bitmaps, JPEG-Dateien und andere Ressourcendateien enthalten. Sie können auch dynamische Assemblys erstellen, die direkt aus dem Arbeitsspeicher ausgeführt werden und vor der Ausführung nicht auf dem Datenträger gespeichert werden. Sie können dynamische Assemblys auf dem Datenträger speichern, nachdem sie ausgeführt wurden.

Es gibt mehrere Möglichkeiten zum Erstellen von Assemblys. Sie können Entwicklungstools wie Visual Studio verwenden, die .dll oder .exe Dateien erstellen können. Sie können Tools im Windows SDK verwenden, um Assemblys mit Modulen aus anderen Entwicklungsumgebungen zu erstellen. Sie können auch Common Language Runtime-APIs verwenden, z System.Reflection.Emit. B. zum Erstellen dynamischer Assemblys.

Kompilieren Sie Assemblys, indem Sie sie in Visual Studio erstellen, sie mit .NET Core-Befehlszeilenschnittstellentools erstellen oder .NET Framework-Assemblys mit einem Befehlszeilencompiler erstellen. Weitere Informationen zum Erstellen von Assemblys mit .NET CLI finden Sie in der Übersicht über .NET CLI.

Hinweis

Um eine Assembly in Visual Studio zu erstellen, wählen Sie im Menü " Erstellen " die Option "Erstellen" aus.

Assemblymanifest

Jede Assembly verfügt über eine Assemblymanifestdatei . Ähnlich wie bei einem Inhaltsverzeichnis enthält das Assemblymanifest:

  • Die Identität der Assembly (Name und Version) der Assembly.

  • Eine Dateitabelle, die alle anderen Dateien beschreibt, aus denen die Assembly besteht, z. B. andere Assemblys, die Sie erstellt haben, auf denen ihre .exe oder .dll Datei basiert, auf Bitmapdateien oder Readme-Dateien basiert.

  • Eine Assemblyverweisliste, bei der es sich um eine Liste aller externen Abhängigkeiten handelt, z. B. .dlls oder andere Dateien. Assemblyverweise enthalten Verweise auf globale und private Objekte. Globale Objekte sind für alle anderen Anwendungen verfügbar. In .NET Core werden globale Objekte mit einer bestimmten .NET Core-Laufzeit gekoppelt. In .NET Framework befinden sich globale Objekte im globalen Assemblycache (GAC). System.IO.dll ist ein Beispiel für eine Assembly im GAC. Private Objekte müssen sich in einer Verzeichnisebene auf oder unter dem Verzeichnis befinden, in dem Ihre App installiert ist.

Assemblys enthalten Informationen zu Inhalt, Versionsverwaltung und Abhängigkeiten. Daher müssen sich die Anwendungen, die sie verwenden, nicht auf externe Quellen wie die Registrierung auf Windows-Systemen verlassen, um ordnungsgemäß zu funktionieren. Assemblys reduzieren .dll Konflikte und machen Ihre Anwendungen zuverlässiger und einfacher bereitzustellen. In vielen Fällen können Sie eine . NET-basierte Anwendung einfach durch Kopieren der Dateien auf den Zielcomputer. Weitere Informationen finden Sie unter Assemblymanifest.

Hinzufügen eines Verweises auf eine Assembly

Um eine Assembly in einer Anwendung zu verwenden, müssen Sie einen Verweis darauf hinzufügen. Wenn auf eine Assembly verwiesen wird, sind alle barrierefreien Typen, Eigenschaften, Methoden und anderen Member seiner Namespaces für Ihre Anwendung verfügbar, als wären deren Code Teil der Quelldatei.

Hinweis

Auf die meisten Assemblys aus der .NET-Klassenbibliothek wird automatisch verwiesen. Wenn auf eine Systemassembly nicht automatisch verwiesen wird, fügen Sie einen Verweis auf eine der folgenden Arten hinzu:

  • Fügen Sie für .NET und .NET Core einen Verweis auf das NuGet-Paket hinzu, das die Assembly enthält. Verwenden Sie entweder den NuGet-Paket-Manager in Visual Studio, oder fügen Sie ein <PackageReference-Element> für die Assembly zum CSPROJ - oder VBPROJ-Projekt hinzu.
  • Fügen Sie für .NET Framework mithilfe des Dialogfelds " Verweis hinzufügen " in Visual Studio oder der -reference Befehlszeilenoption für die C# - oder Visual Basic-Compiler einen Verweis auf die Assembly hinzu.

In C# können Sie zwei Versionen derselben Assembly in einer einzigen Anwendung verwenden. Weitere Informationen finden Sie unter externem Alias.

Titel BESCHREIBUNG
Assemblyinhalte Elemente, aus denen eine Assembly besteht.
Assemblymanifest Daten im Assemblymanifest und wie sie in Assemblys gespeichert werden.
Globaler Assemblycache Wie das GAC Assemblys speichert und verwendet.
Assemblies mit starkem Namen Merkmale von stark benannten Assemblys.
Überlegungen zur Assemblysicherheit Funktionsweise der Sicherheit mit Assemblys.
Assemblyversionsverwaltung Übersicht über die .NET Framework-Versionsverwaltungsrichtlinie.
Platzierung der Assembly Speicherort für Assemblys.
Assemblys und parallele Ausführung Verwenden Sie mehrere Versionen der Laufzeit oder einer Assembly gleichzeitig.
Ausgeben dynamischer Methoden und Assemblys Erstellen dynamischer Assemblys
Wie die Laufzeit Assemblys findet Wie .NET Framework Assemblyverweise zur Laufzeit aufgelöst.

Referenz

System.Reflection.Assembly

Siehe auch