Assembly Binding Redirection

Was ist Assembly Binding Redirection?
Fordert ein .NET-Programm ein bestimmtes Assembly an und dieses ist im Global Assembly Cache (GAC) nicht vorhanden, stürzt die Applikation ab. Ist jedoch eine andere Version verfügbar, welche die gleiche Funktionalität bietet, kann auf diese umgeleitet werden.

Wann wird Assembly Binding Redirection benötigt?
Wird auf einem PC beispielsweise eine neue RobotWare-Version installiert, werden die entsprechenden Assemblies im Cache ersetzt. Damit ein Programm mit Referenzen auf die alten Versionen nicht neu kompiliert werden muss, kann nun eine Umleitung konfiguriert werden.

Welche Version ist installiert?
Im GAC sind die Assemblies mit Name, Version und Public Key Token aufgelistet.

Wo findet man den GAC?
Der Global Assembly Cache ist im Ordner "assembly" im Windows-Verzeichnis.

Wie wird's gemacht?
Jede .NET-Applikation kann mit einer Konfigurations-Datei ergänzt werden. Ihr Name setzt sich aus dem Namen des Programmes mit der Erweiterung ".config" zusammen, z.B. HookTester.exe.config. Diese Datei beinhaltet die Umleitung in folgender Form:

<?xml version="1.0"?>
<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="ABB.Robotics" publicKeyToken="1DA709B7D1F14B7B" culture="neutral"/>
                <bindingRedirect oldVersion="0.0.0.0-5.14.204.0" newVersion="5.13.2039.0"/>
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="ABB.Robotics.Controllers" publicKeyToken="1DA709B7D1F14B7B" culture="neutral"/>
                <bindingRedirect oldVersion="0.0.0.0-5.14.204.0" newVersion="5.13.2039.0"/>
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="ABB.Robotics.Adapters.IRC5" publicKeyToken="1DA709B7D1F14B7B" culture="neutral"/>
                <bindingRedirect oldVersion="0.0.0.0-5.14.204.0" newVersion="5.13.2039.2"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

Damit nun immer auf die benötigte Version umgeleitet wird, muss der Versionsbereich unter "oldVersion" alle Versionen beinhalten, inkl. der installierten. Die Umleitung "newVersion" zeigt auf die in der Software referenzierte Version.

Download AssemblyBindingTemplate