Schritt 4: Suchen der Assembly mit CodeBases oder durch Sondierung

Nachdem die richtige Assemblyversion mithilfe der Informationen aus dem Verweis der aufrufenden Assembly und der Konfigurationsdateien ermittelt worden ist und der globale Assemblycache (nur nach Assemblys mit starkem Namen) überprüft wurde, versucht die Common Language Runtime, die Assembly ausfindig zu machen. Die Suche nach einer Assembly setzt sich aus folgenden Schritten zusammen:

  1. Wenn ein <CodeBase>-Element in der Anwendungskonfigurationsdatei gefunden, überprüft die Common Language Runtime den angegebenen Speicherort. Wenn eine Übereinstimmung gefunden wird, wird diese Assembly verwendet und es findet keine Sondierung statt. Wird die Assembly dort nicht gefunden, schlägt die Bindungsanforderung fehl.

  2. Die Common Language Runtime sucht daraufhin nach der Assembly, auf die verwiesen wurde, und wendet dabei die Regeln an, die weiter unten im Abschnitt erläutert werden.

Hinweis

Wenn Sie mehrere Versionen einer Assembly in einem Verzeichnis und eine bestimmte Version dieser Assembly verweisen möchten, müssen Sie das <CodeBase>-Element anstelle des Attributs privatePath<Überprüfen> des Elements verwenden.Wenn Sie das <Überprüfen>-Element verwenden, beendet die Laufzeit auf, um zu überprüfen, wenn sie zum ersten Mal eine Assembly vorhanden, die den einfachen Assemblynamen übereinstimmt, ob eine vollständige Übereinstimmung handelt oder nicht.Bei einer korrekten Übereinstimmung wird diese Assembly verwendet.Wenn es sich nicht um eine korrekte Übereinstimmung handelt, wird die Sondierung beendet und die Bindung schlägt fehl.

Assemblysuche mit CodeBases

CodeBase-Informationen können über ein <CodeBase>-Element in einer Konfigurationsdatei zur Verfügung gestellt werden. Diese CodeBase wird stets vor der Suche nach der Assembly überprüft, auf die verwiesen wird. Enthält eine Herausgeberrichtliniendatei, in der die Umleitung der endgültigen Version enthalten ist, auch ein <CodeBase>-Element enthält, ist dieses <CodeBase> das Element, das verwendet wird. Wenn beispielsweise Ihre Anwendungskonfigurationsdatei ein <CodeBase>-Element festlegt, gleichzeitig aber eine Herausgeberrichtliniendatei, die Anwendungsinformationen überschreibt, ebenfalls ein <CodeBase>-Element, das <CodeBase>-Element in der Herausgeberrichtliniendatei verwendet.

Wenn am Speicherort keine Übereinstimmung gefunden wird, der durch <CodeBase>-Element angegeben wird, schlägt die Bindungsanforderung fehl und es werden keine weiteren Schritte ausgeführt. Wird durch die Common Language Runtime ermittelt, dass eine Assembly den Kriterien einer aufrufenden Assembly entspricht, wird diese Assembly verwendet. Wenn die Datei, die das angegebene <CodeBase>-Element angegeben wurde, geladen wird, überprüft die Laufzeit, ob Name, Version, Kultur und die Übereinstimmung des öffentlichen Schlüssels der aufrufende Verweis der Assembly.

Hinweis

Assemblys, auf die verwiesen wird, die außerhalb des Stammverzeichnisses der Anwendung müssen einen starken Namen aufweisen und entweder im globalen Assemblycache installiert sein oder mithilfe des <CodeBase>-Elements angegeben werden.

Assemblysuche durch Überprüfung

Wenn sich kein <CodeBase>-Element in der Anwendungskonfigurationsdatei befindet, wird die Assembly, die vier Überprüfungskriterien gesucht:

  • Anwendungsbasis, die der Stammort für die Ausführung der Anwendung ist.

  • Kultur, die das Kulturattribut der Assembly darstellt, auf die verwiesen wird.

  • Name der Assembly, auf die verwiesen wird.

  • Das Attribut <Überprüfen>privatePath des Elements, das die benutzerdefinierte Liste von Unterverzeichnissen im Stammort. Dieser Speicherort kann in der Anwendungskonfigurationsdatei und in verwaltetem Code mithilfe der AppendPrivatePath-Eigenschaft für eine Anwendungsdomäne festgelegt werden. Im Fall der Festlegung in verwaltetem Code wird zuerst der privatePath des verwalteten Codes und daraufhin der in der Anwendungskonfigurationsdatei angegebene Pfad überprüft.

15hyw9x3.collapse_all(de-de,VS.110).gifÜberprüfen der Anwendungsbasis- und Kulturverzeichnisse

Die Common Language Runtime beginnt mit der Überprüfung immer in der Anwendungsbasis, die entweder eine URL oder das Stammverzeichnis der Anwendung auf einem Computer ist. Wird die Assembly, auf die verwiesen wird, in der Anwendungsbasis nicht gefunden und stehen keine Informationen über die Kultur zur Verfügung, durchsucht die Common Language Runtime alle Unterverzeichnisse mit diesem Assemblynamen. Zu den überprüften Verzeichnissen gehören:

   [Anwendungsbasis] / [Assemblyname].dll

   [Anwendungsbasis] / [Assemblyname] / [Assemblyname].dll

Wenn für die Assembly, auf die verwiesen wird, Informationen zur Kultur angegeben sind, werden nur die folgenden Verzeichnisse überprüft:

   [Anwendungsbasis] / [Kultur] / [Assemblyname].dll

   [Anwendungsbasis] / [Kultur] / [Assemblyname] / [Assemblyname].dll

15hyw9x3.collapse_all(de-de,VS.110).gifÜberprüfen mit dem privatePath-Attribut

Zusätzlich zu den Unterverzeichnissen der Kultur und, die für die Assembly, auf die verwiesen wird, dem Namen, überprüft die Common Language Runtime auch Verzeichnisse, die mithilfe des privatePath-Attributs des <Überprüfen>-Elements angegeben werden. Die Verzeichnisse, die mit dem privatePath-Attribut angegeben werden, müssen Unterverzeichnisse des Stammverzeichnisses der Anwendung sein. Die überprüften Verzeichnisse unterscheiden sich, je nachdem, ob Informationen zur Kultur in der Anforderung der Assembly enthalten sind.

Die Laufzeit beendet die Sondierung bei Auffinden der ersten Übereinstimmung einer Assembly mit dem einfachen Assemblynamen, auf den verwiesen wurde, unabhängig davon, ob es sich um eine vollständige Übereinstimmung handelt oder nicht. Bei einer korrekten Übereinstimmung wird diese Assembly verwendet. Wenn es sich nicht um eine korrekte Übereinstimmung handelt, wird die Sondierung beendet und die Bindung schlägt fehl.

Wenn Informationen zur Kultur enthalten sind, erfolgt die Überprüfung der folgenden Verzeichnisse:

   [Anwendungsbasis] / [bin-Pfad] / [Kultur] / [Assemblyname].dll

   [Anwendungsbasis] / [bin-Pfad] / [Kultur] / [Assemblyname] / [Assemblyname].dll

Wenn keine Informationen zur Kultur enthalten sind, werden die folgenden Verzeichnisse überprüft:

   [Anwendungsbasis] / [bin-Pfad] / [Assemblyname].dll

   [Anwendungsbasis] / [bin-Pfad] / [Assemblyname] / [Assemblyname].dll

15hyw9x3.collapse_all(de-de,VS.110).gifBeispiele einer Überprüfung

Folgende Informationen stehen zur Verfügung:

Die Common Language Runtime überprüft die folgenden URLs:

   http://www.code.microsoft.com/de/myAssembly.dll

   http://www.code.microsoft.com/de/myAssembly/myAssembly.dll

   http://www.code.microsoft.com/bin/de/myAssembly.dll

   http://www.code.microsoft.com/bin/de/myAssembly/myAssembly.dll

15hyw9x3.collapse_all(de-de,VS.110).gifMehrere Assemblys mit dem gleichen Namen

Das folgende Beispiel zeigt, wie mehrere Assemblys mit dem gleichen Namen konfiguriert werden.

   <dependentAssembly>
      <assemblyIdentity name="Server" publicKeyToken="c0305c36380ba429" /> 
         <codeBase version="1.0.0.0" href="v1/Server.dll"/>
         <codeBase version="2.0.0.0" href="v2/Server.dll"/>
   </dependentAssembly>

15hyw9x3.collapse_all(de-de,VS.110).gifWeitere überprüfte Speicherorte

Der Speicherort einer Assembly kann auch mithilfe des aktuellen Bindungskontextes ermittelt werden. Dieses Verfahren kommt besonders häufig bei Verwendung der Assembly.LoadFrom-Methode oder in Szenarien mit COM-Interop zum Einsatz. Wenn eine Assembly die LoadFrom-Methode verwendet, um auf eine andere Assembly zu verweisen, wird der Speicherort der aufrufenden Assembly als Hinweis auf den Speicherort der Assembly angesehen, auf die verwiesen wird. Bei gefundener Übereinstimmung wird diese Assembly geladen. Besteht keine Übereinstimmung, setzt die Common Language Runtime die Suche mit der entsprechenden Semantik fort und fordert Windows Installer auf, die Assembly zur Verfügung zu stellen. Wenn keine Assembly zur Verfügung gestellt wird, die mit der Bindungsanforderung übereinstimmt, wird eine Ausnahme ausgelöst. Bei der Ausnahme handelt es sich um eine TypeLoadException in verwaltetem Code, sofern auf einen Typ verwiesen wurde, oder um eine FileNotFoundException, sofern die geladene Assembly nicht gefunden wurde.

Wenn beispielsweise Assembly1 auf Assembly2 verweist und Assembly1 von http://www.code.microsoft.com/utils heruntergeladen wurde, wird dieser Speicherort als Hinweis auf den Speicherort von Assembly2.dll angesehen. Die Common Language Runtime überprüft http://www.code.microsoft.com/utils/Assembly2.dll und http://www.code.microsoft.com/utils/Assembly2/Assembly2.dll, um die Assembly zu finden. Wenn Assembly2 in keinem der beiden Speicherorte vorhanden ist, wird eine Anfrage an Windows Installer gestellt.

Siehe auch

Konzepte

So sucht Common Language Runtime nach Assemblys

Schritt 1: Untersuchen der Konfigurationsdateien

Schritt 2: Suchen nach Assemblys, auf die zuvor verwiesen wurde

Schritt 3: Durchsuchen des globalen Assemblycaches

Partielle Assemblyverweise