NUnit在Windows 7/64位系统上出现“缺失”GPSVC.DLL的问题

21

我最近将操作系统从Vista/32位升级到Win7/64位。在我的旧机器上,一切正常。

不幸的是,在我的新机器上,NUnit无法加载我的单元测试并显示错误消息“System.IO.FileNotFoundException: 无法加载文件或程序集'UnitTest'或其其中之一的依赖项。系统找不到指定的文件。” (实际上,为了做到这一点,我必须将解决方案中的所有项目都设置为32位)。

于是我加载了Dependency Walker,它告诉我缺少IESHIMS.DLL。我在我的计算机上找到了两个版本,因此我从Internet Explorer目录中复制了32位版本,并且DW不再抱怨该文件。

但是,它仍然缺少GPSVC.DLL。我只在C:\Windows\System32中找到了一个副本,但是当我将其复制到我的单元测试目录中时,DW会抱怨它是64位的,并且NUnit仍无法运行。它现在还列出了SYSNTFY.DLL。我只有一个,而且也是64位的。NUnit仍报错。

那么我应该放弃这个64位操作系统,回到老旧的32位,还是我错过了什么明显的东西?


2
gpsvc.dll似乎只支持64位。但是,它是延迟加载的,因此如果实际上没有使用它,它就不会被加载。我不知道你的情况出了什么问题,但是把重点放在gpsvc.dll上似乎是一个误导。 - Michael
我希望那是这种情况,但是 NUnit 仍然拒绝加载我的单元测试。顺便说一下,DW 还显示了 IEFRAME.DLL 和 SHLWAPI.DLL 的标志,但它们也是延迟加载的。 - Mike Hanson
3个回答

10
我今天遇到了同样的问题,幸运的是有一个非常简单的解决方法和一个更复杂的解决方法。
简单的解决方法是运行nunit-console-x86.exe,而不是nunit-console.exe。
困难的解决方法有一个部分解释:
问题出在nunit控制台运行程序以64位模式运行,这会导致它无法加载你的32位模式的单元测试dll文件。
解决方法是修改nunit控制台exe文件,告诉Windows强制以32位兼容模式运行。这个link会告诉你如何操作。
注意,你还需要下载一个Windows SDK来获取corflags.exe,并记得从SDK命令提示符中运行命令。

0
唯一让我成功的方法是将整个应用程序转换为32位目标,并在32位虚拟机上进行测试。此外,DLL必须放在本地(非网络)驱动器上,因为不允许在网络驱动器上进行调试(至少我无法让它工作)。

0

Windows有一个64位的命令提示符,但您可以通过显式启动c:\windows\syswow64\cmd.exe来获取32位的命令提示符。从那里,您可以调用c:\windows\syswow64\regsvr32.exe,并且注册将成功。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接