将 TeamBuild 的一部分作为 x64 运行 [用于 xunit.net 测试]
使用 Team Foundation Build,我调用 xunit.net xunit 任务,即 /platform:AnyCpu
,但我对 TFSBuild.proj 的 TeamBuild 调用是普通的。
我有许多特定于 x64 的测试(`/platform:x64'),这些测试因 ImageFormatException 而阻塞。 我还有一个标记为 x86 的测试程序集,因此它不能是全部或全部。
NUnit 在 MSBuild 任务上有平台切换,而 xunit 没有。
我可以想到以下方法:
- 调用 64 位 msbuild 子任务来调用 xunit 任务 - 没有 ToolPath 参数,所以如果这是一个好主意,那么最干净的 Exec 任务语法是什么,传递子环境?
- 特殊情况下,使用 xunit.console.x64 调用 64 位
- 将整个 TeamBuild 切换到 x64,特殊情况下切换到 x86(但这只会让我陷入需要特殊情况 x86 的相反情况)。 (我还假设除了必须确保自定义任务位于正确的 PROGRA~...\MsBuild 目录中之外,可能还会有更多麻烦)
其他人在处理此类问题方面取得了哪些成功?
Using Team Foundation Build, I'm invoking the xunit.net xunit task, which is /platform:AnyCpu
, but my TeamBuild invocation of the TFSBuild.proj is vanilla.
I have a number of tests that are x64 specific (`/platform:x64'), which choke with an ImageFormatException. I have also a test asembly that's marked x86 so it can't be all or nothing.
NUnit has a platform switch on the MSBuild task, xunit doesnt.
I can think of the following approaches:
- invoke a 64 bit msbuild child task to invoke the xunit task - there isnt a ToolPath param, so if that's a good idea, what's the cleanest Exec task syntax to do that, passing in the child environment?
- special case the invocation of the 64 bit with xunit.console.x64
- switch the entire TeamBuild over to x64 and special case the x86 (but that just lands me in the inverse situation of needinn to special case the x86). (I also assume that other than having to make sure custom tasks are in the right PROGRA~...\MsBuild dir, there's probably going to be more hassle)
What have others had success with in handling issues like this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
xUnit.net 在与运行程序相同的进程内(在单独的 AppDomain 中)运行其测试。 由于 MSBuild 被标记为仅限 32 位,因此使用 MSBuild xunit 任务运行的任何测试都必须在 32 位模式下运行。
最简单的解决方法是不使用 MSBuild 任务,而是使用控制台运行程序。 由于这会创建一个新进程,因此默认情况下它将以 64 位模式运行。 另外,如果您使用的是 1.5 beta,我们还包含了可以强制使用 32 位模式的 EXE (xunit.console.x86.exe),这可以解决您的 32 位与 64 位测试问题。
xUnit.net runs its tests inside the same process as the runner, in a separate AppDomain. Since MSBuild is flagged as 32-bit-only, any tests run with the MSBuild xunit task must run in 32-bit mode.
The simplest work-around is to not use the MSBuild task, but instead to shell out to the console runner. Since that creates a new process, it will run in 64-bit mode by default. Also, if you're using the 1.5 beta, we have included EXEs which can force 32-bit mode (xunit.console.x86.exe), which solves your 32- vs. 64-bit test issues.