Esta no es una pregunta problemática, sino una pregunta de comprensión general sobre el funcionamiento de la redirección de enlace de ensamblaje.
Consultas
¿La versión antigua y la nueva cambian solo cuando hay un cambio en la versión principal?
<dependentAssembly> <assemblyIdentity name="FooBar" publicKeyToken="32ab4ba45e0a69a1" culture="en-us" /> <bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" /> </dependentAssembly>¿Por qué son necesarios los redireccionamientos vinculantes? Suponga que tiene la aplicación A que hace referencia a la biblioteca B y también a la biblioteca C de la versión 1.1.2.5. La biblioteca B, a su vez, también hace referencia a la biblioteca C, pero de la versión 1.1.1.0. Ahora tenemos un conflicto, porque no puede cargar diferentes versiones del mismo ensamblado en tiempo de ejecución. Para resolver este conflicto, puede usar la redirección de enlace, generalmente a la nueva versión (pero también puede ser a la anterior). Para ello, agregue lo siguiente al archivo app.config de la aplicación A, en configuration > runtime > assemblyBinding (vea aquí un ejemplo de archivo de configuración completo):
<dependentAssembly> <assemblyIdentity name="C" publicKeyToken="32ab4ba45e0a69a1" culture="en-us" /> <bindingRedirect oldVersion="1.1.1.0" newVersion="1.1.2.5" /> </dependentAssembly>También puede especificar un rango de versiones para mapear:
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.2.5" />Ahora, la biblioteca B, que se compiló con referencia a C de la versión 1.1.1.0, utilizará C de la versión 1.1.2.5 en tiempo de ejecución. Por supuesto, es mejor que se asegure de que la biblioteca C sea compatible con versiones anteriores o esto podría generar resultados inesperados.
Puede redirigir cualquier versión de las bibliotecas, no solo las principales.
Encontramos un problema con la redirección de enlace para NewtonSoft.Json. Buscamos la versión del archivo en las propiedades del archivo win 10 "9.0.1.19813", buscamos el número y la redirección seguía fallando. Más investigación y descubrió que estábamos mirando la versión del archivo y no la versión del ensamblado. Por lo tanto, me pregunto si la gente está confundiendo la versión del archivo (que cambia con frecuencia) y la versión de ensamblaje (que no se puede ver en el Explorador de archivos de Windows 10). Para ver la versión de ensamblaje de un dll, puede ejecutarlo en PowerShell. Reemplace el nombre de dll con el que desea encontrar la versión.
[Reflection.AssemblyName]::GetAssemblyName('C:\development\bin\Newtonsoft.Json.dll').VersionEl resultado de lo anterior es.
Major Minor Build Revision ----- ----- ----- -------- 9 0 0 0Ver referencias: