【问题标题】:Application runs as x86 in unit tests in Visual Studio, but runs as x64 when it stands alone应用程序在 Visual Studio 的单元测试中以 x86 运行,但在独立时以 x64 运行
【发布时间】:2015-12-04 07:20:57
【问题描述】:

这行代码

Environment.Is64BitProcess

当我的应用单独运行时评估为真。

但是当它在我的 Visual Studio 单元测试中运行时,相同的表达式的计算结果为 false。

我选择了“Any CPU”作为解决平台,机器是64位的。

这是为什么?

即使我像上图那样设置它,Resharper 仍然以 x86 运行它

【问题讨论】:

  • @Luaan 并不真正相关。 VS 可以很好地运行/调试 x86 和 x64 进程。默认测试运行器也可以在 x64 模式下运行(只要它配置为这样做)。
  • @Luaan 原始评论是关于与 VS 的关系是 x86 - 我试图强调一个事实,即 x86 进程确实阻止 VS 处理 x64 进程。现在,由于原始评论消失了,我的两个 cmets 都将在 10...9 内自毁...

标签: c# .net visual-studio anycpu


【解决方案1】:

这基本上表示单元测试运行程序是作为 32 位进程启动的。如何配置取决于您使用的单元测试运行器(其中有很多)。

当您运行单元测试时,与单元测试运行器的配置相比,您的应用程序程序集在架构方面的任何偏好都将被忽略 - 而当您独立运行时,构建配置(例如“AnyCPU 更喜欢 x86 " 或只是 "AnyCPU") 将是相关的。

如果你真的非常需要你的单元测试在 x64 中运行,你应该看看你是如何运行它们的——如果你不能改变它们在 VS 中的运行方式,你至少可以运行它们在一个独立的运行器中,可能更容易支持 x64。

【讨论】:

  • VS 2013: Tests->Tests Settings -> Default Processor Architecture -> x64 应该选择 x64 作为默认的 VS 测试运行器。对于旧的一次设置可能在其他地方 - stackoverflow.com/questions/5880337/run-tests-in-64-bit
  • @Alexei,是的,选择了该选项,但是 Resharper 单元测试运行器仍在 x86 中运行我的测试项目,即使测试项目设置为 64 位机器上的任何 cpu。在 resharper 设置中,我根据测试项目的目标平台将默认平台架构选择为自动
  • @CuiPengFei "any CPU" 默认自带 "prefer 32-bit" - 确保没有设置 - stackoverflow.com/questions/12066638/…
  • @AlexeiLevenkov,是的,但这仅适用于 .net4.5+ 与 2015 相比,对吗?我正在使用.net4。并且那个选项是灰色的。
  • @CuiPengFei VS2012+,但该选项仅适用于 EXE(因为 DLL 从其进程继承位)。如果您需要 x64 - 要么只制作 DLL x64,要么确保配置加载 DLL 以运行 x64 的进程/测试运行器(而不是尝试“检测”/默认为任何东西)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 2021-03-26
相关资源
最近更新 更多