c# - autogenerate - app config dependentassembly
Redirección de enlace de ensamblaje: ¿cómo y por qué? (2)
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
- ¿Por qué la redirección de enlace muestra solo versiones principales y no números menores de compilación y revisión?
-
¿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é se necesitan 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 ensamblaje en tiempo de ejecución.
Para resolver este conflicto, puede utilizar la redirección de enlace, generalmente a la nueva versión (pero también puede ser a la antigua).
Para ello, agregue lo siguiente al archivo app.config de la aplicación A, en la sección
configuration > runtime > assemblyBinding
(consulte
here
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 asignar:
<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, usará 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 que esto pueda 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 de archivo win 10 "9.0.1.19813", buscamos el número y la redirección seguía fallando. Investigando más y descubrimos que estábamos mirando la versión del archivo y no la versión del ensamblaje. Entonces, me pregunto si la gente está confundiendo la Versión del archivo (que cambia a menudo) y la Versión del 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 ejecutar esto en powershell. Reemplace el nombre dll con el que desea encontrar la versión.
[Reflection.AssemblyName]::GetAssemblyName(''C:/development/bin/Newtonsoft.Json.dll'').Version
El resultado de arriba es.
Major Minor Build Revision
----- ----- ----- --------
9 0 0 0
Ver referencias: