2009-12-09 16 views
21

Recentemente ho aggiornato da Vista/32 a Win7/64. Sulla mia vecchia macchina, tutto funzionava bene.NUnit "missing" GPSVC.DLL su Windows 7/64

Purtroppo, sulla mia nuova macchina NUnit non verrà caricato mio test di unità, con il messaggio di errore "System.IO.FileNotFoundException: Impossibile caricare il file o l'assembly 'unittest' o una delle sue dipendenze Il sistema non riesce a trovare. il file specificato ". (In realtà, ho dovuto passare attraverso tutti i progetti di mia soluzione e li misi a 32-bit per arrivare a questo punto.)

Così ho caricato Dependency Walker, e mi ha detto che mi mancava Ieshims.dll . Ne ho trovati due sulla mia macchina, quindi ho copiato nella versione a 32 bit dalla directory di Internet Explorer, e DW ha smesso di lamentarsi di quel file.

Tuttavia, manca anche GPSVC.DLL. Ho trovato solo una copia di questo in C: \ Windows \ System32, ma quando lo copio nella mia directory test dell'unità, DW si lamenta che è 64-bit, e NUnit continua a non funzionare. Ora aggiunge anche SYSNTFY.DLL all'elenco mancante. Ne ho solo uno, e anche questo è 64-bit. NUnit segnala ancora un errore.

Quindi, dovrei eliminare questo sistema operativo a 64 bit e tornare a quello vecchio di 32 bit o mi manca qualcosa di ovvio?

+2

gpsvc.dll sembra essere solo 64 bit. Tuttavia, è caricato in ritardo in modo che non dovrebbe essere un problema qui poiché verrà caricato solo se viene effettivamente utilizzato. Non so cosa stia andando nel tuo caso, ma concentrarsi su gpsvc.dll sembra essere una falsa pista. – Michael

+0

Spero che sia il caso, tuttavia NUnit ha comunque rifiutato di caricare i miei test unitari. BTW, DW mostra anche i flag sia per IEFRAME.DLL che per SHLWAPI.DLL, ma anche questi sono caricati in ritardo. –

risposta

10

Ho riscontrato lo stesso problema oggi, per fortuna c'è una soluzione molto semplice e una più complessa.

La soluzione semplice è quello di eseguire NUnit-console-x86.exe, invece di NUnit-console.exe

La correzione difficile con una spiegazione parziale è:

Quello che sta accadendo è il corridore console NUnit è in esecuzione in modalità a 64 bit, che in qualche modo impedisce il caricamento delle DLL di test dell'unità che sono in modalità a 32 bit.

La correzione viene apportata alla console nunit exe, si dice a Windows di forzare l'esecuzione in una modalità di compatibilità a 32 bit. Questo link mostra come farlo.

NB, è necessario scaricare un sdk di Windows per ottenere il file corflags.exe, ricordarsi di eseguire il comando dal prompt dei comandi di SDK.

0

L'unico modo per farlo funzionare era convertire la mia intera applicazione in destinazione a 32 bit e testarla su una macchina virtuale a 32 bit. Inoltre, le DLL dovevano essere su un'unità locale (non di rete), perché il debug non è consentito sulle unità di rete (almeno non ero in grado di farlo funzionare).

0

Windows ha un prompt dei comandi a 64 bit, ma è possibile ottenere uno a 32 bit avviando esplicitamente c:\windows\syswow64\cmd.exe. Da lì è possibile chiamare c:\windows\syswow64\regsvr32.exe e la registrazione avrà esito positivo.