web-dev-qa-db-fra.com

Pourquoi un "bindingRedirect" est-il ajouté au fichier app.config après avoir ajouté le package Microsoft.Bcl.Async?

Je me demandais pourquoi nuget avait ajouté le code suivant à mes applications app.config fichier, après avoir installé le 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>

Si je supprime cet élément XML de la configuration, l'application ne fonctionnera pas correctement.

Pour autant que je le comprends, nous pouvons utiliser le bindingRedirect pour que l'application charge une version plus récente ou plus ancienne d'un assembly au cas où la version que nous utilisions lors de la compilation de l'EXE a disparu.
Cependant, j'utilise exactement la version 2.5.19.0, pourquoi aurais-je alors besoin d'une redirection?

the version of my dll

Pourquoi ai-je besoin de cela bindingRedirect?

46
GameScripting

Les assemblages Microsoft.Threading.Tasks et Microsoft.Threading.Tasks.Extensions font toujours référence à la v1.5.11.0 de System.Runtime et System.Threading.Tasks.

Sans le bindingRedirect, le Microsoft.* les assemblys essaient de charger une ancienne version du System.* assemblys, qui échoueraient.

41
Richard Deeming

Vous dites simplement chaque fois qu'il existe une ancienne version comprise entre .0.0.0 à 2.5.19., veuillez remplacer cette version par la nouvelle version qui est 2.5.19.0

Disons que vous n'avez pas l'ancienne version disponible dans votre projet et que vous essayez d'y accéder, vous vous retrouverez avec une erreur comme "System.IO.FileLoadException: 'Impossible de charger le fichier ou l'assemblage"

Ainsi, lorsque votre projet recherche une ancienne version de ce DLL il remplacera simplement celui-ci par un nouveau qui est disponible

8
Bhargav Konda