Acabo de copiar un proyecto existente en una máquina nueva para comenzar a desarrollarlo y me he encontrado con un problema con la versión de uno de mis ensambles a los que se hace referencia (una DLL de telerik, como sucede).
El proyecto originalmente hacía referencia a una versión anterior del ensamblado (vamos a llamarlo v1.0.0.0). Mi nueva máquina tiene instalada la última versión del ensamblaje, así que pensé que la había actualizado (llamemos a la nueva versión v2.0.0.0).
Ahora, aquí está el problema: si copio el viejo v1.0.0.0 dll a la carpeta del proyecto y lo agrego como referencia, el sitio web se inicia sin ningún problema. Si elimino esa referencia (y también elimino la DLL anterior de mi sistema) y agrego la nueva versión (v2.0.0.0), la página muestra la siguiente excepción:
No se pudo cargar el archivo o ensamblado 'XXXXXX, Versión = 1.0.0.0, Cultura = neutral, PublicKeyToken = 121fae78165ba3d4' o una de sus dependencias. La definición de manifiesto del ensamblado ubicado no coincide con la referencia del ensamblado. (Excepción de HRESULT: 0x80131040)
Claramente, el código está buscando la versión desactualizada y no puede encontrarla. ¿Pero por qué?
Busqué la carpeta de la solución para ese número de versión y no pude encontrar una sola referencia. Revisé dos veces el texto del archivo .csproj y encontré que la versión muestra correctamente la última versión y HintPath muestra correctamente la ruta a la nueva DLL. Además, debido a que no instalé la antigua DLL en el sistema, no aparece en mi GAC (aunque v2.0.0.0 sí, como se esperaba).
Luego habilité el visor de registro de fusión para tratar de descubrir por qué está buscando esa versión anterior, pero no tuve suerte:
Assembly Load Trace: The following information can be helpful to determine why the assembly 'XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4' could not be loaded.
=== Pre-bind state information ===
LOG: User = MyComp\me
LOG: DisplayName = XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
(Fully-specified)
LOG: Appbase = file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/
LOG: Initial PrivatePath = d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\bin
Calling assembly : WebApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\web.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX/XXXXXX.DLL.
LOG: Attempting download of new URL file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/bin/XXXXXX.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
Todo lo que dice es que comienza buscando ese viejo ensamblaje. Intenté encontrar una solución en línea y vi esta pregunta SO similar , pero parece ser exactamente lo contrario de mi problema. El programa de ese interrogador estaba encontrando la DLL incorrecta en lugar de la referenciada. Mientras que mi problema es que el programa está buscando misteriosamente la DLL incorrecta y no puede encontrarla cuando se puede encontrar localmente la correcta en la carpeta bin y en el GAC.
¿Por qué el mío está buscando la versión anterior? ¿Dónde más puedo buscar para encontrar esta mala referencia?