2010-03-10 10 views
8

Estoy usando el 1.0 RTM de Fluent Nhibernate, con una versión 3.0 de NHibernate. Con el fin de hacer esto, tengo que añadir lo siguiente en mi archivo .config:¿Cómo hago que NUnit respete mi bindingRedirect en mi testassembly.dll.config?

<runtime> 
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="NHibernate" culture="neutral" publicKeyToken="aa95f207798dfdb4"/> 
    <bindingRedirect oldVersion="2.1.0.4000" newVersion="3.0.0.1001"/> 
    </dependentAssembly> 
</assemblyBinding> 

Esto funciona muy bien cuando se ejecutan las pruebas de integración con el plugin TestDriven.net, pero falla en la GUI o NUnit corredor de la consola con el siguiente error:

System.IO.FileLoadException: No se pudo cargar el archivo o ensamblado 'NHibernate, Versión = 2.1.0.4000, Cultura = neutro, PublicKeyToken = aa95f207798dfdb4' o una de sus dependencias. La definición del manifiesto del ensamblaje ubicado no coincide con la referencia de ensamblaje. (Excepción de HRESULT: 0x80131040)

¿Cómo hago que NUnit respete mi bindingRedirect y ejecute mis pruebas de integración con éxito?

Respuesta

3

La clave es ponerlo en el archivo .config correcto. Ver Does redirecting assembly binding work for unit testing with a test runner?.

Otro enfoque sería compilar fluent-nhibernate contra NHibernate 3.0. Si tiene errores de compilación, pregunte al equipo de desarrollo y/o bifurque la fuente y compile.

+2

Entonces, ¿cuál sería el archivo .config correcta? –

+0

@FrancoisBotha siga el enlace –

+3

Eso no está realmente en el espíritu de StackOverflow. http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers –

11

He tenido problemas similares al ejecutar nunit en un servidor de CI (bambú, para ser específico). La forma en que lo entiendo es que si nunit se ejecuta en su propio espacio de proceso (como si acabara de ejecutarlo desde la línea de comandos), entonces puede leer correctamente los redireccionamientos de enlace de ensamblado .dll.config. Sin embargo, si su servidor de CI está ejecutando nunit dentro del espacio de proceso del servidor de CI, entonces intenta obtener la configuración del proceso principal. Para asegurarse de que nunit se ejecute en su propio espacio de proceso, agregue la opción de línea de comando /process:multiple. Al menos, eso es lo que funcionó para mí, de modo que nunit encontraría correctamente los enlaces de redirección.

TL; DR: utilizar la opción de línea de comandos /process:multiple

+0

NB: Funciona también con/process: Separate –

Cuestiones relacionadas