Windows 7/64 上的 NUnit“丢失”GPSVC.DLL
Posted
技术标签:
【中文标题】Windows 7/64 上的 NUnit“丢失”GPSVC.DLL【英文标题】:NUnit "missing" GPSVC.DLL on Windows 7/64 【发布时间】:2010-12-25 00:40:08 【问题描述】:我最近从 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 位,还是我遗漏了一些明显的东西?
【问题讨论】:
gpsvc.dll 似乎只有 64 位。但是,它是延迟加载的,因此这里不应该成为问题,因为只有在实际使用时才会加载它。我不知道你的情况出了什么问题,但关注 gpsvc.dll 似乎是一个红鲱鱼。 我希望是这样,但是 NUnit 仍然拒绝加载我的单元测试。顺便说一句,DW 还显示了 IEFRAME.DLL 和 SHLWAPI.DLL 的标志,但这些也是延迟加载的。 【参考方案1】:我可以让它工作的唯一方法是将我的整个应用程序转换为 32 位目标,并在 32 位虚拟机上测试它。此外,DLL 必须位于本地(非网络)驱动器上,因为不允许在网络驱动器上进行调试(至少我无法让它工作)。
【讨论】:
【参考方案2】:我今天遇到了同样的问题,幸运的是有一个非常简单的解决方法和一个更复杂的解决方法。
简单的解决方法是运行 nunit-console-x86.exe,而不是 nunit-console.exe
部分解释的困难修复是:
正在发生的事情是 nunit 控制台运行程序在 64 位模式下运行,这会以某种方式阻止它加载处于 32 位模式的单元测试 dll。
修复了 nunit 控制台 exe,您告诉 Windows 强制它以 32 位兼容模式运行。这个link 向您展示了如何做到这一点。
注意,您还需要下载一个 windows sdk 来获取 corflags.exe,记得从 SDK 命令提示符运行命令。
【讨论】:
【参考方案3】:Windows 有 64 位命令提示符,但您可以通过显式启动 c:\windows\syswow64\cmd.exe
来获得 32 位命令提示符。从那里您可以拨打c:\windows\syswow64\regsvr32.exe
,注册将成功。
【讨论】:
以上是关于Windows 7/64 上的 NUnit“丢失”GPSVC.DLL的主要内容,如果未能解决你的问题,请参考以下文章
Windows 7 上的 Java 7 64 位:如何切换 Java 版本
Windows 7 64 位上的 streamlit 安装错误
Windows 7 64 位 Visual Studio 2013 上的本机 cl.exe
Windows 7(64 位)上的 Python 3.7 64 位:CSV - 字段大于字段限制(131072)[重复]
Windows 7 64 位上的 MercurialEclipse:不安装“Mercurial 的 Windows 二进制文件”