Freigeben über


So sucht Common Language Runtime nach Assemblies

Um Ihre .NET Framework-Anwendung erfolgreich bereitstellen zu können, müssen Sie mit dem Verfahren vertraut sein, mit dem die Common Language Runtime die Assemblies sucht und bindet, aus denen Ihre Anwendung zusammengesetzt ist. Standardmäßig versucht die Common Language Runtime, die genaue Version einer Assembly einzubinden, mit der die Anwendung erstellt wurde. Dieses Standardverhalten kann durch Einstellungen in der Konfigurationsdatei überschrieben werden.

Die Common Language Runtime führt mehrere Schritte aus, um eine Assembly zu finden und einen Verweis auf eine Assembly aufzulösen. Jeder Schritt wird in den folgenden Abschnitten erläutert. Der Begriff "Überprüfung" wird häufig verwendet, um zu beschreiben, wie die Common Language Runtime nach Assemblies sucht. Er verweist auf einige Heuristiken, mit denen die Assembly auf Basis ihres Namens und ihrer Kultur gesucht wird.

Hinweis   Bindungsinformationen können in der Protokolldatei mit dem Assembly Binding Log Viewer-Tool (Fuslogvw.exe) angezeigt werden, das im .NET Framework SDK enthalten ist.

Initiieren der Bindung

Das Auffinden einer und Binden an eine Assembly beginnt mit dem Versuch der Common Language Runtime, einen Verweis auf eine andere Assembly aufzulösen. Dieser Verweis kann statisch oder dynamisch sein. Der Compiler zeichnet statische Verweise in den Metadaten des Assemblymanifests während der Erstellungszeit auf. Dynamische Verweise werden dynamisch erstellt und resultieren aus dem Aufruf verschiedener Methoden, z. B. System.Reflection.Assembly.Load.

Der bevorzugte Weg zum Verweisen auf eine Assembly ist die Verwendung eines vollständigen Verweises mit Assemblynamen, -version, -kultur und Token des öffentlichen Schlüssels (falls vorhanden). Diese Informationen werden von der Common Language Runtime bei der Suche nach der Assembly verwendet. Die dabei ausgeführten Schritte werden in diesem Abschnitt weiter unten beschrieben. Der verwendete Auflösungsprozess ist immer gleich, unabhängig davon, ob der Verweis sich auf eine statische oder dynamische Assembly bezieht.

Sie können auch dynamisch auf eine Assembly verweisen, indem Sie die Methode nur unter Angabe partieller Informationen zur Assembly, z. B. des Assemblynamens, aufrufen. In diesem Fall wird lediglich das Anwendungsverzeichnis nach der Assembly durchsucht; es erfolgen keine weiteren Überprüfungen. Partiell verweisen Sie unter Verwendung der verschiedenen Methoden zum Laden von Assemblies wie z. B. System.Reflection.Assembly.Load oder AppDomain.Load. Wenn die Common Language Runtime den globalen Assemblycache und das Anwendungsverzeichnis nach einer verwiesenen Assembly durchsuchen soll, können Sie mit der System.Reflection.Assembly.LoadWithPartialName-Methode einen partiellen Verweis festlegen. Weitere Informationen zum partiellen Binden finden Sie unter Partielle Assemblyverweise.

Mit einer Methode wie der System.Reflection.Assembly.Load-Methode können Sie schließlich auch dynamische Verweise erstellen und nur partielle Informationen angeben. Dann können Sie den Verweis mit dem <qualifyAssembly>-Element in der Anwendungskonfigurationsdatei kennzeichnen. Mit diesem Element können Sie die vollständigen Verweisinformationen (Name, Version, Kultur und ggf. das Token des öffentlichen Schlüssels) in der Anwendungskonfigurationsdatei anstelle im Code bereitstellen. Dieses Verfahren sollten Sie anwenden, wenn Sie einen Verweis auf eine Assembly außerhalb des Anwendungsverzeichnisses voll kennzeichnen oder auf eine Assembly im globalen Assemblycache verweisen möchten, aber gleichzeitig aus praktischen Gründen den vollständigen Verweis in der Konfigurationsdatei statt im Code angeben möchten.

Hinweis   Diesen Typ des partiellen Verweises sollten Sie nicht bei Assemblies verwenden, die für mehrere Anwendungen freigegeben sind. Da Konfigurationseinstellungen nach Anwendung und nicht nach Assembly erfolgen, müssten bei einer freigegebenen Assembly mit diesem Typ des partiellen Verweises jede Anwendung, die diese freigegebene Assembly verwendet, in der Konfigurationsdatei die kennzeichnenden Informationen enthalten sein.

Folgende Schritte werden ausgeführt, um einen Verweis auf eine Assembly aufzulösen:

  1. Bestimmen der korrekten Assemblyversion durch Überprüfung anwendbarer Konfigurationsdateien, einschließlich der Konfigurationsdatei der Anwendung, der Publisherrichtliniendatei und der Computerkonfigurationsdatei. Wenn die Konfigurationsdatei auf einem Remotecomputer gespeichert ist, muss zuerst die Konfigurationsdatei der Anwendung gesucht und gedownloadet werden.
  2. Überprüfen, ob der Assemblyname bereits zuvor gebunden wurde. Ist dies der Fall, wird die zuvor geladene Assembly verwendet.
  3. Durchsuchen des globalen Assemblycaches. Wird die Assembly dort gefunden, wird sie von der Common Language Runtime verwendet.
  4. Suchen der Assembly, wobei folgendermaßen vorgegangen wird:
    1. Wenn die Konfigurations- und Publisherrichtlinien keine Auswirkungen auf den ursprünglichen Verweis haben und die Anforderung zur Bindung mit Hilfe der Assembly.LoadFrom-Methode erstellt wurde, wird nach Hinweisen auf den Speicherort gesucht.

    2. Wenn eine Codebasis in den Konfigurationsdateien gefunden wurde, wird nur diese Position überprüft. Wenn die Überprüfung fehlschlägt, wird durch die Common Language Runtime festgelegt, dass die Anforderung zur Bindung fehlgeschlagen ist und keine weitere Überprüfung erfolgt.

    3. Überprüfen der Assembly mit Hilfe von Heuristiken, die im Abschnitt Sondieren beschrieben werden. Wurde die Assembly nach der Überprüfung nicht gefunden, fordert die Common Language Runtime Windows Installer auf, die Assembly zur Verfügung zu stellen. Dabei handelt es sich um eine Installation bei Bedarf.

      Hinweis   Es findet weder eine Versionsüberprüfung von Assemblies mit starkem Namen statt, noch überprüft die Common Language Runtime den globalen Assemblycache nach Assemblies ohne starken Namen.

Siehe auch

Bereitstellungsszenarien | Schritt 1: Untersuchen der Konfigurationsdateien | Schritt 2: Suchen nach zuvor referenzierten Assemblies | Schritt 3: Durchsuchen des globalen Assemblycaches | Schritt 4: Suchen der Assembly mit CodeBases oder durch Sondierung | Partielle Assemblyverweise | Bereitstellen von .NET Framework-Anwendungen