Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MSTest拒绝运行64位?_C#_.net_64 Bit_Mstest_Outlook Redemption - Fatal编程技术网

C# MSTest拒绝运行64位?

C# MSTest拒绝运行64位?,c#,.net,64-bit,mstest,outlook-redemption,C#,.net,64 Bit,Mstest,Outlook Redemption,我正在为使用Outlook Redemption的应用程序编写测试,该应用程序必须运行64位(它连接到windows MAPI和Outlook x64)。不幸的是,我无法让它以64位运行测试。我尝试过使用.runsettings文件(经过编辑以指示64位)和.testsettings文件(也经过编辑),最后我选择了testsettings>Default Processor Architecture>64位,但没有成功 每次System.Environment.Is64BitProcess都是f

我正在为使用Outlook Redemption的应用程序编写测试,该应用程序必须运行64位(它连接到windows MAPI和Outlook x64)。不幸的是,我无法让它以64位运行测试。我尝试过使用
.runsettings
文件(经过编辑以指示64位)和
.testsettings
文件(也经过编辑),最后我选择了
testsettings>Default Processor Architecture>64位
,但没有成功

每次System.Environment.Is64BitProcess都是false,当我加载dll连接到Outlook和MAPI时,我都会遇到可怕的COM异常:
错误的操作系统或应用程序的操作系统版本(来自HRESULT的异常:0x800401FA(CO_E_errowosforApp))
,表示已安装64位Outlook,尝试访问它的进程是32位的

在进行设置更改后,我重新启动了VS 2012,因为我在某个地方读到可能需要重新启动。有人有其他建议吗?我可以把它写成一个控制台应用程序,运行非正式测试并报告它们的状态,但我的下一步是将这些测试集成到自动化构建中。任何帮助都将不胜感激

编辑 .testsettings中主机设置页面的屏幕截图

实验 有趣的是,我做了一个小实验。我用一个控制台应用程序项目创建了一个新的解决方案。我在那里放了一个刚刚返回true的公共方法。当我运行console应用程序并暂停执行时,我看到它确实在运行64位;没问题。然后我添加了一个测试项目,创建了一个称为方法的测试。我还添加了
var is64=Environment.Is64bitProcess
,并在其后面放置了一个断点

可以预见,在不改变任何选项的情况下,is64是错误的。我从测试下拉列表中选择了64位默认体系结构,然后清理了解决方案,再次运行测试,结果相同,运行32位。我重新启动VS2012,清理、构建,结果相同。我创建了一个testsettings文件,并在Test菜单中引用了它,clean build,same,restart,clean,build same。我创建了一个runsettings文件set
x64
,在测试菜单中引用了该文件,再次运行了一遍,得到了相同的结果。QTAgent32.exe继续运行该进程,并且绝对拒绝听从我的要求,让它运行64位


我发誓,如果我必须删除QTAgent32.exe并将QTAgent32.exe重命名为该名称,我会的。当电脑想要固执的时候,我就把我的愿望塞进它的喉咙里。如果你不想看到我虐待工作站,请有人告诉我出了什么问题。想想电脑。

这有点超出我的范围,但两个项目的配置设置都设置正确,对吗?您将它们设置为针对任何CPU或x64构建


只是想让奥卡姆把它剃掉。。。我知道VS神奇地决定在我身上更改配置设置,这让我沮丧了太多次。

如果您使用VS2012,那么您将能够通过以下测试设置选择平台x64

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

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

您将在“C:\ProgramFiles(x86)\Common7\IDE\CommonExtensions\Microsoft\TestWindow”中找到vstest.console.exe

请注意以下步骤

  • 打开命令
  • 导航到“C:\ProgramFiles(x86)\Common7\IDE\CommonExtensions\Microsoft\TestWindow\”
  • 执行vstest.console.exe“C:\Projects\Test\Test.Automation.Specs.dll”/InIsolation/platform:x64
  • 注意:Test.Automation.Specs.dll是您的测试项目,您需要定义完整路径


    我希望这有帮助

    我刚才遇到了同样的问题。以下是解决问题的步骤

  • 将单元测试的默认处理器体系结构从x86切换到x64:转到测试->测试设置->默认处理器体系结构->x64
  • 将单元测试项目的生成设置更改为x64
  • 清洁溶液,然后重新生成溶液。您的单元测试现在应该显示在测试资源管理器中,您不应该再遇到这个问题
  • 参考资料


  • 也许是个愚蠢的问题,但您确定这些是为您的测试运行选择的
    设置吗?是的。与该文件对应的测试菜单下的路径菜单项旁边有一个复选标记。他们在2012年修复了此问题。有一个64位测试主机。正如其他人所说,您可以使用corflags从mstest中删除32位的only标志,然后需要从wow注册表节点复制一些许可证注册表设置,并将executionhost设置为msil。在我的团队中,我们无法将注册表设置添加到构建机器中,因此我编写了一个小应用程序,该应用程序使用测试元数据和测试存根生成代理程序集,当执行测试时,代理加载测试DLL并执行实际测试。如果指定的实现方法是从MSTest中删除32位标志并在注册表中四处游荡等等,那么我想说,它在2012年肯定不会被修复。虽然您可以强制它工作,但这并不意味着它是固定的。我已经在这上面花费了太多的时间,但我以后可能会有更多的周期来支付。就目前而言,我认为它和以往一样破产了。一旦微软进入一种状态,它接受设置并对其进行操作,而不必在MSTest上进行黑客攻击,那么我会同意的。的确如此。AnyCPU已设置,我正在x64机器上运行,采用x64版本的Windows 7。感谢您的回答。您在那里使用的是什么版本的Visual Studio?发布此问题时,我正在使用Visual Studio 2012。我从来没有回到这个问题(我有actu)