c# .net app-config bcl

c# - ¿Por qué se agrega un "bindingRedirect" al archivo app.config después de agregar el paquete Microsoft.Bcl.Async?



.net app-config (2)

Los ensamblajes Microsoft.Threading.Tasks y Microsoft.Threading.Tasks.Extensions siguen haciendo referencia a v1.5.11.0 de System.Runtime y System.Threading.Tasks .

Sin el bindingRedirect , los ensamblados de Microsoft.* Intentarían cargar una versión anterior de los ensamblados de System.* , Que fallaría.

Me preguntaba por qué nuget agregó el siguiente código a mi archivo de aplicaciones app.config , después de instalar 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 elimino este elemento XML de la configuración, la aplicación no funcionará correctamente.

Por lo que yo entiendo, podemos usar bindingRedirect para hacer que la aplicación cargue una versión más nueva o más antigua de un ensamblaje en caso de que la versión que estábamos usando al compilar el EXE haya desaparecido.
Sin embargo, estoy usando exactamente la versión 2.5.19.0 , ¿por qué necesitaría una redirección entonces?

¿Por qué necesito este bindingRedirect ?


Simplemente está diciendo que siempre que haya una versión anterior que esté entre 0.0.0.0 a 2.5.19.0 , reemplace esa versión con la nueva versión que es 2.5.19.0

Digamos que no tiene la versión anterior disponible en su proyecto y está intentando acceder a ella, luego terminará con un error como "System.IO.FileLoadException: ''No se pudo cargar el archivo o el ensamblaje"

Entonces, cuando su proyecto esté buscando una versión anterior de esa DLL, simplemente la reemplazará con una nueva que está disponible