Umleiten von Assemblyversionen

Wenn Sie eine .NET Framework-Anwendung für eine bestimmte Version einer Assembly mit starkem Namen erstellen, wird diese Assemblyversion von der Anwendung während der Laufzeit verwendet. Unter Umständen möchten Sie aber für die Ausführung der Anwendung eine neuere Assemblyversion verwenden. Mithilfe einer Anwendungskonfigurations-, Computerkonfigurations- oder Herausgeberrichtliniendatei können Sie eine Version der Assembly zu einer anderen Version umleiten. Ausführliche Informationen darüber, wie diese Dateien von der Common Language Runtime zur Bestimmung der Assemblyversion verwendet werden, finden Sie unter So sucht Common Language Runtime nach Assemblys. Sie können das .NET Framework Configuration-Tool (Mscorcfg.msc) verwenden, um auf Anwendungs- oder Computerebene Assemblyversionen umzuleiten, oder Sie nehmen die notwendigen Änderungen direkt in der Konfigurationsdatei vor.

HinweisHinweis

Sie können ausschließlich Versionen von Assemblys mit starkem Namen umleiten.Bei Assemblys ohne starken Namen ignoriert die Common Language Runtime die Versionsinformationen.

Umleiten von Assemblyversionen mithilfe von Herausgeberrichtlinien

Anbieter von Assemblys können bestimmen, dass Anwendungen eine neuere Assemblyversion verwenden sollen, indem sie der aktualisierten Assembly eine Herausgeberrichtliniendatei hinzufügen. Die Herausgeberrichtliniendatei befindet sich im globalen Assemblycache und enthält Einstellungen für die Umleitung der Assembly.

Jede Version einer Assembly im Format major.minor verfügt über eine eigene Herausgeberrichtliniendatei. Beispielsweise hat die Umleitung von Version 1.1.2.222 zu 1.1.3.000 die gleiche Datei zum Ergebnis wie die Umleitung von Version 1.1.2.321 zu 1.1.3.000. Die Umleitung von Version 2.0.0.999 zu 3.0.0.000 führt jedoch zu einem anderen Ergebnis.

Ist eine Herausgeberrichtliniendatei vorhanden, wird diese nach Prüfung des Assemblymanifests und der Anwendungskonfigurationsdatei von der Common Language Runtime überprüft. Anbieter sollten Herausgeberrichtlinien nur verwenden, wenn die neue Assembly abwärts kompatibel zur umzuleitenden Assembly ist.

Sie können Herausgeberrichtlinien umgehen, indem Sie entsprechende Einstellungen in der Anwendungskonfigurationsdatei vornehmen.

Umgehen von Herausgeberrichtlinien

Neue Assemblyversionen, die als abwärts kompatibel gelten, können eine Anwendung trotzdem beschädigen. Wenn dieser Fall eintritt, können Sie folgende Einstellung in der Anwendungskonfigurationsdatei vornehmen, um die Herausgeberrichtlinie durch die Common Language Runtime umgehen zu lassen.

<publisherPolicy apply="no" />

Zwar können Sie die Herausgeberrichtlinie umgehen, um die Anwendung für Benutzer verfügbar zu halten, doch sollten Sie dieses Problem auf jeden Fall Ihrem Assemblyanbieter mitteilen. Sofern eine Assembly über eine Herausgeberrichtlinie verfügt, sollte der Anbieter gewährleisten, dass die Assembly abwärts kompatibel ist und Clients die neue Version in vollem Umfang nutzen können.

Umleiten von Assemblyversionen auf Anwendungsebene

Angenommen, der Anbieter veröffentlicht eine neue Version der von Ihrer Anwendung verwendeten Assembly, stellt jedoch keine Herausgeberrichtlinie zur Verfügung, da er nicht garantieren möchte, dass die neue Assembly mit der ursprünglichen Version abwärts kompatibel ist. Sie können festlegen, dass die Anwendung die neuere Version der Assembly verwendet, indem Sie in die Konfigurationsdatei Assemblybindungsinformationen einfügen.

Umleiten von Assemblyversionen auf Computerebene

In seltenen Fällen kann es von Administratorseite wünschenswert sein, dass alle Anwendungen eines Computers eine bestimmte Version einer Assembly verwenden. Beispielsweise kann durch Verwendung einer bestimmten Assemblyversion für alle Anwendungen eine Sicherheitslücke im System geschlossen werden. Wenn eine Assembly in die Konfigurationsdatei eines Computers umgeleitet wird, gilt für alle Anwendungen, die bisher die alte Version verwendet haben, von nun an die neue Version. Die Konfigurationsdatei des Computers überschreibt die der Anwendung sowie die Herausgeberrichtlinie.

Angeben der Assemblybindung in Konfigurationsdateien

Anwendungskonfigurations-, Computerkonfigurations- und Herausgeberrichtliniendatei verwenden das gleiche XML-Schema, um die Assemblyumleitung zu verarbeiten.

Assemblybindung

Zur Angabe von Assemblyinformationen geben Sie für jede Assembly Daten in ein <dependentAssembly>-Element ein. Das <assemblyIdentity>-Element enthält Angaben zur Identifikation einer Assembly. Sie können mehr als ein <dependentAssembly>-Element in die Konfigurationsdatei einbinden, aber es muss genau ein <assemblyIdentity>-Element in jedem <dependentAssembly>-Element vorhanden sein.

Um eine Assembly zu binden, müssen Sie die Zeichenfolge urn:schemas-microsoft-com:asm.v1 mit dem xmlns-Attribut im <assemblyBinding>-Tag angeben.

Angeben von Herausgeberrichtlinien

Um die Common Language Runtime zu veranlassen, die Herausgeberrichtlinie für eine bestimmte Assembly zu umgehen, müssen Sie das <publisherPolicy>-Element in das <dependentAssembly>-Element einfügen. Damit die Herausgeberrichtlinie für alle von der Anwendung verwendeten Assemblys umgangen wird, müssen Sie diese Einstellung in das <assemblyBinding>-Element einfügen. Sie können auch das .NET Framework Configuration-Tool (Mscorcfg.msc) verwenden, um die Herausgeberrichtlinie zu umgehen.

Die Standardeinstellung für das apply-Attribut lautet yes. Wird das apply-Attribut auf no festgelegt, werden alle vorherigen yes-Einstellungen überschrieben. Wird beispielsweise auf der Anwendungsebene apply auf no festgelegt, werden alle assemblyspezifischen apply-Einstellungen ignoriert, selbst wenn diese den Wert yes aufweisen. Daher ist die Einstellung auf no die einzig sinnvolle, da sie die Standardeinstellung ändert.

Umleiten von Assemblyversionen

Um eine Version zu einer anderen umzuleiten, verwenden Sie das <bindingRedirect>-Element. Das oldVersion-Attribut kann entweder eine einzelne Version oder einen Bereich von Versionen bestimmen. Beispielsweise wird durch <bindingRedirect oldVersion="1.1.0.0-1.2.0.0" newVersion="2.0.0.0"/> angegeben, dass die Common Language Runtime die Version 2.0.0.0 statt der Assemblyversionen zwischen 1.1.0.0 und 1.2.0.0 verwenden soll.

Beispiel

Das folgende Beispiel zeigt, wie eine Version von myAssembly zu einer anderen umgeleitet und die Herausgeberrichtlinie für mySecondAssembly ausgeschaltet wird.

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="myAssembly"
          publicKeyToken="32ab4ba45e0a69a1"
          culture="en-us" />
        <!-- Assembly versions can be redirected in application, 
          publisher policy, or machine configuration files. -->
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
      <assemblyIdentity name="mySecondAssembly"
        publicKeyToken="32ab4ba45e0a69a1"
        culture="en-us" />
        <!-- Publisher policy can be set only in the application 
          configuration file. -->
        <publisherPolicy apply="no" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Umleiten der .NET Framework-Assemblybindung

Mit dem appliesTo-Attribut für das <assemblyBinding>-Element einer Anwendungskonfigurationsdatei können Sie Assemblybindungsverweise auf eine bestimmte Version von .NET Framework umleiten. Dieses optionale Attribut verwendet eine .NET Framework-Versionsnummer, um anzugeben, welche Version verwendet wird. Wenn kein appliesTo-Attribut angegeben wird, gilt das <assemblyBinding>-Element für alle Versionen von .NET Framework.

Das appliesTo-Attribut wurde in .NET Framework, Version 1.1, eingeführt. Es wird von .NET Framework, Version 1.0, ignoriert. Dies bedeutet, dass bei der Verwendung von .NET Framework, Version 1.0, alle <assemblyBinding>-Elemente angewendet werden, selbst wenn ein appliesTo-Attribut angegeben wurde.

Wenn z. B. die Assemblybindung für die Regcode-Assembly aus .NET Framework, Version 1.0, umgeleitet werden soll, müssen Sie folgenden XML-Code in die Anwendungskonfigurationsdatei einfügen:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" 
    appliesTo="v1.0.3705">
    <dependentAssembly> 
      <!-- assembly information goes here -->
    </dependentAssembly>
  </assemblyBinding>
</runtime>

Bei den <assemblyBinding>-Elementen muss die Reihenfolge beachtet werden. Geben Sie zunächst die Informationen zum Umleiten der Assemblybindung für alle Assemblys aus .NET Framework, Version 1.0, ein und dann diejenigen für alle Assemblys aus .NET Framework, Version 1.1. Geben Sie zuletzt die Informationen zum Umleiten der Assemblybindung für alle .NET Framework-Assemblyumleitungen ein, bei denen nicht das appliesTo-Attribut verwendet wird und die daher für alle Versionen .NET Framework-Versionen gelten. Falls bei der Umleitung ein Konflikt auftritt, wird die erste passende Umleitungsanweisung in der Konfigurationsdatei verwendet.

Um z. B. einen Verweis auf eine Assembly von .NET Framework, Version 1.0, und einen anderen Verweis auf eine Assembly von .NET Framework, Version 1.1, umzuleiten, müssen Sie das im folgenden Pseudocode dargestellte Muster verwenden.

<assemblyBinding xmlns="..." appliesTo="v1.0.3705"> 
  <!—.NET Framework version 1.0 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..." appliesTo="v1.1.5000"> 
  <!—.NET Framework version 1.1 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..."> 
  <!-- redirects meant for all versions of the runtime --> 
</assemblyBinding>

Siehe auch

Aufgaben

Gewusst wie: Erstellen einer Herausgeberrichtlinie

Referenz

Schema für Laufzeiteinstellungen

Konzepte

Assemblys in der Common Language Runtime (CLR)

So sucht Common Language Runtime nach Assemblys

Weitere Ressourcen

Programmieren mit Assemblys

Konfigurationsdateien

Konfigurieren von .NET Framework-Anwendungen

Konfigurationsdateischema für .NET Framework