2009-12-09 19 views
21

Recientemente me actualicé de Vista/32 a Win7/64. En mi máquina vieja, todo estaba funcionando bien.NUnit GPSVC.DLL "perdido" en Windows 7/64

Desafortunadamente, en mi nueva máquina NUnit no cargará mis pruebas de unidad, con el mensaje de error "System.IO.FileNotFoundException: No se pudo cargar el archivo o ensamblado 'UnitTest' o una de sus dependencias. El sistema no puede encontrar el archivo especificado ". (En realidad, tuve que ir a través de todos los proyectos de mi solución y los puse a 32 bits para llegar hasta aquí.)

Así que cargamos Dependency Walker, y me dijeron que me estaba perdiendo ieshims.dll . Encontré dos en mi máquina, así que copié en la versión de 32 bits del directorio de Internet Explorer y DW dejó de quejarse sobre ese archivo. Sin embargo, también falta GPSVC.DLL. Encontré solo una copia de esto en C: \ Windows \ System32, pero cuando copio eso en el directorio de prueba de mi unidad, DW se queja de que es de 64 bits, y NUnit aún no se ejecutará. También ahora agrega SYSNTFY.DLL a la lista que falta. Solo tengo uno de esos, y eso también es de 64 bits. NUnit aún informa un error.

¿Debo eliminar este sistema operativo de 64 bits y volver al antiguo de 32 bits, o me falta algo obvio?

+2

gpsvc.dll parece ser solo de 64 bits. Sin embargo, está cargado de forma diferida, por lo que no debería ser un problema, ya que solo se cargará si se usa realmente. No sé qué está yendo mal en su caso, pero centrarse en gpsvc.dll parece ser una pista falsa. – Michael

+0

Espero que ese sea el caso, sin embargo, NUnit aún se negó a cargar mis pruebas unitarias. Por cierto, DW también muestra indicadores tanto para IEFRAME.DLL como para SHLWAPI.DLL, pero también están cargados con retraso. –

Respuesta

10

Hoy me tocó el mismo problema, afortunadamente hay una solución muy simple y otra más compleja.

La solución simple es ejecutar nunit-consola-x86.exe, en lugar de nunit-console.exe

La solución difícil con una explicación parcial es:

Lo que ocurre es que el corredor de la consola nunit se ejecuta en modo de 64 bits, lo que de alguna manera impide que cargue los dlls de prueba de la unidad que están en el modo de 32 bits.

La corrección se realiza en el exe de la consola nunit, le dice a Windows que lo fuerce a ejecutar en un modo de compatibilidad de 32 bits. Esta link muestra cómo hacerlo.

NB, tendrá que descargar también un archivo .dll de Windows para obtener el archivo corflags.exe, recuerde ejecutar el comando desde el símbolo del sistema del SDK.

0

La única forma en que pude hacer que funcionara fue convertir toda mi aplicación a un objetivo de 32 bits y probarla en una máquina virtual de 32 bits. Además, las DLL tenían que estar en una unidad local (no de red), porque la depuración no está permitida en las unidades de red (al menos no pude hacer que funcione).

0

Windows tiene un símbolo del sistema de 64 bits, pero puede obtener uno de 32 bits comenzando c:\windows\syswow64\cmd.exe explícitamente. Desde allí puede llamar al c:\windows\syswow64\regsvr32.exe y el registro tendrá éxito.