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?
Pourquoi ai-je besoin de cela bindingRedirect
?
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.
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