Un programa WinForm .NET que escribí hace algún tiempo. Porque hace referencia a muchos archivos de biblioteca, pero estos archivos de biblioteca se han corregido recientemente para detectar algunos errores y algoritmos. Pero el archivo del programa principal no ha cambiado mucho. Entonces no es como recompilar el programa principal. Entonces, todas las nuevas versiones de los archivos DLL se copiaron al directorio en ejecución, con la esperanza de que el programa principal pudiera llamar directamente a la nueva versión del archivo de la biblioteca. Resultó que estos archivos de la biblioteca estaban firmados con un nombre seguro. Tan pronto como se llama al programa principal, se produce un error que indica que no se puede encontrar el archivo de esta versión.
Más tarde, verifiqué MSDN y descubrí que basta con agregar el nodo de tiempo de ejecución a la configuración.
<tiempo de ejecución>
<assemblyBinding xmlns="urna:schemas-microsoft-com:asm.v1">
<ensamblaje dependiente>
<ensambladoIdentidad nombre="MiEnsamblaje"
publicKeyToken="2b7c3a3291de04"
cultura="neutral" />
<bindingRedirect oldVersion="3.0.0.8"
nuevaVersión="4.1.0.0"/>
</dependienteAsamblea>
</ensamblajeBinding>
</runtime>
Sin embargo, el requisito previo para esto es que el PublicKeyToken de las dos DLL sea el mismo, lo que significa que deben firmarse con el mismo archivo sn.
Por supuesto, si el archivo de su biblioteca no está firmado con ningún nombre seguro, no es necesario considerar problemas de versión.