C# MSTest拒绝运行64位?
我正在为使用Outlook Redemption的应用程序编写测试,该应用程序必须运行64位(它连接到windows MAPI和Outlook x64)。不幸的是,我无法让它以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
.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文件setx64
,在测试菜单中引用了该文件,再次运行了一遍,得到了相同的结果。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 请注意以下步骤
我希望这有帮助我刚才遇到了同样的问题。以下是解决问题的步骤
也许是个愚蠢的问题,但您确定这些是为您的测试运行选择的
设置吗?是的。与该文件对应的测试菜单下的路径菜单项旁边有一个复选标记。他们在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)