在Visual Studio的单元测试中,应用程序以x86方式运行,但在独立运行时以x64方式运行。

3
这行代码。
Environment.Is64BitProcess

当我的应用程序独立运行时,该表达式的值为真。

但是,当它在Visual Studio的单元测试中运行时,相同的表达式的值为假。

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

这是为什么呢?

enter image description here

即使我像上面的图片那样设置了它,Resharper仍然将其作为x86运行。


@Luaan 并不是很相关。VS 可以很好地运行/调试 x86 和 x64 进程。默认的测试运行器也可以在 x64 模式下运行(只要它被配置为这样做)。 - Alexei Levenkov
@Luaan 最初的评论是关于与 VS 的关系是 x86 - 我试图强调的事实是,作为 x86 进程并不会阻止 VS 处理 x64 进程。现在由于原始评论已经消失,我的两个评论将在 10...9... 自我销毁。 - Alexei Levenkov
1个回答

4

这基本上说明了单元测试运行器启动为32位进程。如何配置取决于你使用的单元测试运行器(有许多不同的运行器)。

当你运行单元测试时,与应用程序程序集关于架构的任何偏好相比,将忽略单元测试运行器的配置。而在独立运行时,生成配置(例如"AnyCPU prefer x86"或仅"AnyCPU")将是相关的。

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


2
VS 2013:测试->测试设置->默认处理器架构->x64应该选择x64作为默认的VS测试运行程序。对于旧版本,设置可能在其他地方 - https://dev59.com/v2025IYBdhLWcg3wpXse - Alexei Levenkov
@Alexei,是的,我已选择该选项,但是Resharper单元测试运行程序仍在x86上运行我的测试项目,尽管测试项目在64位机器上设置为任何CPU。并且在resharper设置中,我已经选择了默认的平台架构,即根据测试项目的目标平台自动选择。 - Cui Pengfei 崔鹏飞
@CuiPengFei 默认情况下,“任何 CPU” 都带有“优先使用 32 位” - 确保未设置该选项 - https://dev59.com/f2ct5IYBdhLWcg3wedSP - Alexei Levenkov
@AlexeiLevenkov,是的,但这仅适用于vs 2015中的.net4.5+,对吧?我正在使用.net4.,而该选项已变灰。 - Cui Pengfei 崔鹏飞
@CuiPengFei,VS2012+版本中只有EXE选项(因为DLL的位数继承自其进程)。如果您需要x64 - 要么将DLL设置为仅限x64,要么确保配置进程/测试运行器以加载您的DLL并运行x64(而不是尝试“检测”/默认任何内容)。 - Alexei Levenkov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接