c# - MSTest 拒绝运行 64 位?

标签 c# .net 64-bit mstest outlook-redemption

我正在为使用 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 中主机设置页面的屏幕截图 enter image description here

实验

有趣的是,我做了一个小实验。我使用单个控制台应用程序项目创建了一个新解决方案。我在那里放了一个刚刚返回 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;

enter image description here

在此示例中,我指的是 .runsettings 文件。 设置是

enter image description here

但如果希望通过命令行运行测试,则需要使用 vstest.console.exe 而不是 MSTEST,因为它不支持 x64 test.dlls

你会在“C:\Program Files (x86)\Common7\IDE\CommonExtensions\Microsoft\TestWindow\”找到 vstest.console.exe

请注意以下步骤

  1. 打开CMD
  2. 导航到“C:\Program Files (x86)\Common7\IDE\CommonExtensions\Microsoft\TestWindow\”
  3. 执行 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/

相关文章:

assembly - 在 x64 asm 中,如何使用相对于 RIP 的跳转恰好跳过 1 条指令?

c# - 使用 TFS 2015 分支链接文件

c# - 处理两个不同的应用程序流程

c# - 如何使用 .NET 检测 Windows 64 位平台?

c++ - 如何构建 64 位版本的 Crypto++ dll?

c# - 使用 System.Runtime.Caching,但是当我去检索它时,它是空的?

C# 泛型方法并返回在 xml 方法中创建的参数化类型的对象

c# - HttpClient 请求 ssl 网站,但无法在 uwp 中获取 cookie

c# - 需要 ODataQueryOptions 的单元测试服务

c# - 如何隐藏窗体而不是关闭它