2011-06-28 19 views
11

I instalado Autofixture y Moq usando Nuget.So Tengo la versión 4. moqAutofixture y Moq v4

Cuando se ejecuta el siguiente código

var fixture = new Fixture().Customize(new AutoMoqCustomization()); 
fixture.CreateAnonymous<ISomething>(); 

el siguiente error aparece

Sistema .IO.FileLoadException: podría no cargar el archivo o ensamblado 'Moq, Versión = 3.1.416.3, Culture = neutral, PublicKeyToken = 69f491c39445e920'

También intenté redirigirlo al v4, pero sin suerte.

<configuration> 
    <runtime> 
    <assemblyBinding> 
    <dependentAssembly> 
     <assemblyIdentity name="Moq" publicKeyToken="69f491c39445e920" culture="neutral"/> 
     <bindingRedirect oldVersion="3.1.416.3" newVersion="4.0.10827.0"/> 
    </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

¿Cuál podría ser el problema aquí?

+1

Véase también este billete: http://autofixture.codeplex.com/workitem/4225 – svrist

+0

A partir de [versión 2.13.1] (https://github.com/AutoFixture/AutoFixture/tags) los redireccionamientos de enlace de ensamblaje necesarios ahora [se agregan automáticamente al archivo de configuración] (https://github.com/AutoFixture/AutoFixture/pull/11) cuando instala el paquete [AutoFixture.AutoMoq] (http://nuget.org/packages/AutoFixture.AutoMoq) NuGet. –

Respuesta

17

Con el fin de redirigir la unión en un archivo de configuración de un montaje, es necesario que especifique el espacio de nombres urn:schemas-microsoft-com:asm.v1 en el <assemblyBinding> element, como en este ejemplo:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="Moq" 
            publicKeyToken="69f491c39445e920" 
            culture="neutral"/> 
       <bindingRedirect oldVersion="3.1.416.3" 
           newVersion="4.0.10827.0"/> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

Es interesante señalar que los conjuntos de bibliotecas compiladas con una la versión anterior de .NET (como Moq 3 y AutoFixture 2.1) se cargará automáticamente en un proceso que se ejecuta en .NET 4.0 debido a In-Process Side-by-Side execution. He aquí una cita de MSDN acerca de esto:

Si se compila una aplicación utilizando el tiempo de ejecución de .NET Framework 4, pero incluye una biblioteca que fue construida utilizando un tiempo de ejecución anterior, esa biblioteca utilizará el .NET Framework 4 tiempo de ejecución también. Sin embargo, si usted tiene una aplicación que fue construida utilizando un tiempo de ejecución anterior y una biblioteca que fue construyeron utilizando .NET Framework 4, que debe forzar su aplicación a también utilizar .NET Framework 4

recursos relacionados:

1

La respuesta aceptada no me funcionó porque quiero usar Moq 4 de la misma biblioteca de clases (no exe) como AutoFixture.AutoMoq. También parece haber no plans para admitir Moq 4 de AutoFixture. Terminé usando AutoFixture.AutoRhinoMocks como la siguiente opción más popular, que no entre en conflicto con Moq 4.

+3

¿Qué problemas estás viendo? He estado usando AutoFixture.AutoMoq con Moq 4 por años, sin problemas. –