#HowTo Resolver error Unable to load file ‘System.Threading.Tasks.Extensions’ con Autofac en UnitTest.

En este post te voy a mostrar como resolví el error Unable to load file ‘System.Threading.Tasks.Extensions’ con Autofac en un proyecto de pruebas unitarias.

Mensaje de error.

=== Información de estado anterior al enlace ===
LOG: DisplayName = System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
(Fully-specified)
LOG: Appbase = file:///C:/SVN/.../Out
LOG: PrivatePath inicial = NULL
Ensamblado de llamada : Microsoft.Bcl.AsyncInterfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51.
===
LOG: Este enlace empieza en el contexto de carga default.
LOG: Utilización del archivo de configuración de la aplicación: C:\SVN\....DLL.config
LOG: Utilizando el archivo de configuración de host: 
LOG: Utilizando el archivo de configuración del equipo en C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Referencia posterior a la directiva: System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
LOG: Intento de descarga de la nueva dirección URL file:///C:/SVN/..../Out/System.Threading.Tasks.Extensions.DLL.
AVS: Al comparar el nombre de ensamblado se generó la incompatibilidad: Número de revisión
ERR: Error al completar la instalación del ensamblado (hr = 0x80131040). Finalizó la búsqueda.

Contexto.

  • Recientemente, tuve errores, única y exclusivamente, en la ejecución de pruebas unitarias.
  • Ningún error de ejecución en productivo u otros ambientes.
  • El error de ejecución ocurría en una resolución de dependencias con Autofac.
  • Uso MsTest como framework de pruebas, y Resharper para ejecutarlas.

Intentos de solución.

  • Intente agregar la referencia del package Nuget System.Threading.Tasks.Extensions a los proyectos de librerías de negocios, y el mismo proyecto de pruebas, sin éxito.
  • Agregue referencias al package Nuget Microsoft.Bcl.AsyncInterfaces (es una dependencia de Autofac), sin éxito.
  • Ajuste los bindings redirects para que tomaran la versión del package Nuget, sin éxito.
  • Cambie la compilación de x64 a AnyCPU, sin éxito.
  • Borre referencias sin emplear de los proyectos y limpie caché de Nuget.

Solución.

Note que el directorio de salida de las pruebas unitarias si copiaba un archivo «System.Threading.Tasks.Extensions.dll» al directorio bin. Haciendo una inspección de este con DotPeek, la versión del archivo es la 4.2.0.1. Agregue el siguiente binding redirect  al archivo config de mi proyecto de pruebas.

 <dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
</dependentAssembly>

 

 

Gustavo Sánchez

Soy especialista en escribir software de calidad. Mediante el uso de marcos de trabajo, técnicas y automatización de procesos he podido reducir los costes operativos de los sistemas de la empresa. Sistemas confiables y adaptables producen clientes felices.