Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn Sie veranschaulichen möchten, wie Anwendungen so konfiguriert werden können, dass sie gemeinsam genutzte Komponenten verwenden, die der letzten Version entsprechen oder definitiv kompatibel sind, müssen Sie beide 2.0-Versionen der Datei Reverser.dll im Assemblycache installieren. Dazu verwenden Sie die Datei Build.bat, die das Global Assembly Cache-Tool (Gacutil.exe) einsetzt:
gacutil.exe /i Reverser.dll
Nach der Installation dieser Reverser-Assemblies können Sie den Assemblycache untersuchen, indem Sie in das Installationsverzeichnis von Windows in das Verzeichnis \Assembly wechseln und die Shellerweiterung des Assembly Cache Viewers verwenden:
.gif)
Sie können nun die ausführbare Datei VerClient kompilieren, für die Sie die Version 2.0.0.0 der Reverser-Komponente angeben:
csc /reference:Stringer\Stringer.dll;
... Reverser_v2.0.0.0\Reverser.dll VerClient.cs
Wie unter (3) Pfad für private Komponenten und Bindungsrichtlinie beschrieben, kann das Auffinden von und Binden an Assemblies zur Laufzeit mit einer Anwendungskonfigurationsdatei gesteuert werden. Insbesondere kann das BindingRedirect-Tag verwendet werden, um den Verweis auf eine andere Version einer Assembly mit starkem Namen umzuleiten. Dazu wird die Version im Originalverweis mit dieser neuen Version überschrieben. Mit der folgenden Option wird angegeben, dass für jeden Assemblyverweis von Version 2.0.0.0 bis 2.0.0.9 zur Laufzeit stattdessen die Version 2.0.1.0 verwendet werden soll:
<bindingRedirect
oldVersion="2.0.0.0-2.0.0.9" newVersion="2.0.1.0"
/>
Dadurch hat ein Administrator die Möglichkeit, eine Anwendung neu zu konfigurieren, ohne sie neu zu kompilieren.
Die Beispieldatei VerClient.exe.config im Unterverzeichnis 5_Versioned zeigt diese Option.
Auflistung 2.. Konfigurationsdatei für VerClient.exe (VerClient.exe.config)
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="Stringer"/>
<publisherPolicy apply="no"/>
<dependentAssembly>
<assemblyIdentity name="Reverser"
publicKeyToken="0038acc8beadf1e5"
culture=""/>
<publisherPolicy apply="no"/>
<bindingRedirect oldVersion="2.0.0.0"
newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Da eine Methode eines Typs in Version 2.0.1.0 der Datei Reverser.dll bewusst mit der gleichen Methode in Version 2.0.0.0 inkompatibel gemacht wurde, schlägt der Versuch eines Clients, der mit Version 2.0.0.0 kompatibel ist, diese spätere Revision aufzurufen, fehl. Durch eine Änderung von:
newVersion="2.0.0.0"
in:
newVersion="2.0.1.0"
können Sie dieses Verhalten veranschaulichen, das zu einer MissingMethodException führt. Mit diesem Mechanismus kann ein Administrator eine Anwendung reparieren, damit sie auch dann erfolgreich ausgeführt werden kann, wenn sie versehentlich durch die nachfolgende Installation einer anderen Anwendung beschädigt wird, die eine andere Version derselben gemeinsam genutzten Komponente verwendet.
Beim Bereinigen der Anwendung sollten Sie die Dateien der gemeinsam genutzten Komponente aus dem Assemblycache entfernen:
gacutil /u reverser
Dieser Mechanismus entfernt alle Versionen einer Komponente aus dem Assemblycache. Wenn sich die Komponente noch im privaten Pfad der Anwendung oder einem Unterverzeichnis befindet, dessen Name mit dem der Komponente übereinstimmt, wird sie zukünftig von diesem Speicherort geladen.
Siehe auch
Zusammenfassung: Verpacken und Weitergeben von Anwendungen | Anhang A: Weitere Informationen zum Verpacken und Weitergeben | Anhang B: Tools zum Verpacken und Weitergeben