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