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

csharp_logo

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 usar 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