it-swarm.com.de

Warum wird der app.config-Datei nach dem Hinzufügen des Microsoft.Bcl.Async-Pakets ein "bindingRedirect" hinzugefügt?

Ich habe mich gefragt, warum Nuget meinen Anwendungen den folgenden Code hinzugefügt hat. app.config Datei, nach der Installation des Microsoft.Bcl.Async:

<runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

Wenn ich dieses XML-Element aus der Konfiguration entferne, funktioniert die App nicht richtig.

Soweit ich weiß, können wir mit dem bindingRedirect die App dazu bringen, eine neuere oder ältere Version einer Assembly zu laden, falls die Version, die wir beim Kompilieren der EXE-Datei verwendet haben, nicht mehr vorhanden ist.
Allerdings benutze ich genau die Version 2.5.19.0, warum brauche ich dann eine Umleitung?

the version of my dll

Warum brauche ich diesen bindingRedirect?

46
GameScripting

Die Assemblys Microsoft.Threading.Tasks Und Microsoft.Threading.Tasks.Extensions Verweisen weiterhin auf Version 1.5.11.0 von System.Runtime Und System.Threading.Tasks.

Ohne das bindingRedirect würden die Assemblys Microsoft.* Versuchen, eine alte Version der Assemblys System.* Zu laden, was fehlschlagen würde.

41
Richard Deeming

Sie sagen einfach, wenn es eine ältere Version zwischen .0.0.0 bis 2.5.19. gibt, ersetzen Sie diese Version durch die neue Version 2.5.19.0

Angenommen, Sie haben die ältere Version nicht in Ihrem Projekt verfügbar und versuchen, darauf zuzugreifen. Dann wird eine Fehlermeldung wie "System.IO.FileLoadException: Datei oder Assembly konnte nicht geladen werden" ausgegeben.

Wenn Ihr Projekt also nach einer älteren Version dieser DLL sucht, wird diese einfach durch eine neue Version ersetzt, die verfügbar ist

8
Bhargav Konda