我正在为使用 Outlook Redemption 的应用程序编写测试,该应用程序绝对必须运行 64 位(它连接到 Windows MAPI 和 Outlook x64)。不幸的是,我终其一生都无法让它在 64 位环境下运行测试。我试过使用 .runsettings
文件(编辑为 64 位)和一个 .testsettings
文件(也经过编辑),最后我选择了 Test>TestSettings>Default Processor Architecture>64-bit
, 无济于事。
每次,System.Environment.Is64BitProcess 都是假的,当我加载 dll 以连接到 Outlook 和 MAPI 时,我得到了可怕的 COM 异常:Wrong OS or OS version for application (Exception from HRESULT: 0x800401FA (CO_E_WRONGOSFORAPP))
这表明已安装 64 位 Outlook,并且尝试访问它的进程是 32 位的。
我在更改设置后重新启动了 VS 2012,因为我在某处读到可能需要重新启动。有人有其他建议吗?我可以将其编写为运行非正式测试并报告其状态的控制台应用程序,但我的下一步是将这些测试集成到自动构建中。任何帮助将不胜感激。
编辑
.testsettings 中主机设置页面的屏幕截图
实验
有趣的是,我做了一个小实验。我使用单个控制台应用程序项目创建了一个新解决方案。我在那里放了一个刚刚返回 true 的公共(public)方法。当我运行控制台应用程序并暂停执行时,我发现它确实在运行 64 位;没问题。然后我添加了一个测试项目,创建了一个调用该方法的测试。我还添加了 var is64 = Environment.Is64bitProcess
并在其后放置一个断点。
可以预见,在不更改任何选项的情况下,is64 是错误的。我从被测下拉列表中选择 64 位默认架构,然后清理解决方案,再次运行测试,结果相同,运行 32 位。我重新启动 VS2012,清理、构建,结果相同。我创建了一个 testsettings 文件并在测试菜单中引用了它,clean build, same, restart,clean, build same。我创建了一个 runsettings 文件,设置 <TargetPlatform>x64</TargetPlatform>
, 在测试菜单中引用它,再次运行它,并得出相同的结果。 QTAgent32.exe 继续运行该进程,并且绝对拒绝听从我要求它运行 64 位的要求。
我发誓,如果我必须删除 QTAgent32.exe 并将 QTAgent 重命名为该名称,我会的。当它想要顽固时,我并不甘心把我的愿望塞进电脑的喉咙里。拜托,如果你不想看到我虐待工作站,请有人告诉我出了什么问题。想想计算机。
最佳答案
如果您使用 VS2012,那么您将能够通过如下测试设置选择您的平台 x64;
在此示例中,我指的是 .runsettings 文件。 设置是
但如果希望通过命令行运行测试,则需要使用 vstest.console.exe 而不是 MSTEST,因为它不支持 x64 test.dlls
你会在“C:\Program Files (x86)\Common7\IDE\CommonExtensions\Microsoft\TestWindow\”找到 vstest.console.exe
请注意以下步骤
- 打开CMD
- 导航到“C:\Program Files (x86)\Common7\IDE\CommonExtensions\Microsoft\TestWindow\”
- 执行 vstest.console.exe "C:\Projects\Test\Test.Automation.Specs.dll"/InIsolation /platform:x64
注意:Test.Automation.Specs.dll 是您的测试项目,您需要定义完整路径
希望对你有帮助
关于c# - MSTest 拒绝运行 64 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17705445/