【问题标题】:How do you get an NUnit test project to build on a build machine?如何在构建机器上构建 NUnit 测试项目?
【发布时间】:2014-01-02 15:38:40
【问题描述】:

我一直在努力(不是第一次)为我一直从事的项目设置持续集成。我们使用 CruiseControl.NET,但这并不是真正的问题 - 大多数问题与 csproj + sln 文件和 Visual Studio 有关。经过一番讨论后,我设法解决了这些问题,但我想我会记录下必须是非常常见的问题。

在启动并运行 ccnet 配置后,我遇到的第一个问题是编译错误:

errorCS0234: The type or namespace name 'Gui' does not exist in the namespace 'NUnit' (are you missing an assembly reference?)

在解决了另一个问题后,我遇到了熟悉(而且很痛苦)的 64 位与 32 位问题:

System.BadImageFormatException: Could not load file or assembly '....' or one of its dependencies. An attempt was made to load a program with an incorrect format.

【问题讨论】:

  • 我建议使用 NuGet 为您管理依赖项。大多数时候,It Just Works 并且您的解决方案可以在任何机器上运行,而无需手动安装 NUnit 等。
  • @stijn 它是如何工作的?上面的大部分文档/信息都犯了一个典型的错误,即没有介绍程序 + 它解决了什么问题,并开始深入了解细节
  • @granadaCoder 不错的答案。不知道为什么他们将它们隐藏在 vs2010 的属性窗口中——这确实是最重要的参考信息之一。您还在那里提到了 NuGet,您能否详细介绍一下它的工作原理以及它的用途?
  • NuGet 是一个二进制存储库。一个在那里“发布”和“检索”二进制文件。有关完整说明,请参阅此内容。 lanyrd.com/2013/codemash/schedule/…

标签: c# visual-studio-2010 msbuild nunit cruisecontrol.net


【解决方案1】:

第一个问题是由 Visual Studio 在我引用 NUnit dll 时添加的“提示路径”引起的。这些路径是相对于我本地机器上的 Nunit 安装位置的,并且服务器的结构不同。

如果您查看 Visual Studio 中的属性,您不会看到任何提及这些提示路径的内容。在文本编辑器中打开相关的 csproj,您会看到如下所示的内容:

  <HintPath>..\..\..\..\Program Files (x86)\NUnit 2.5.7\bin\net-2.0\framework\nunit.framework.dll</HintPath>

并用类似这样的东西替换它:

  <HintPath>$(ProgramFiles)\NUnit 2.5.7\bin\net-2.0\framework\nunit.framework.dll</HintPath>

在巡航控制中,我是根据解决方案文件构建的,而不是直接指定要定位的平台。这导致了第二个问题。要解决此问题,您可以使用 Visual Studio。打开解决方案并单击顶部栏中的 Build=>Configuration Manager。在活动解决方案平台中,我只有“x86”。从下拉列表中选择“新建”并选择“AnyCpu”,然后选择从“复制设置”,并勾选创建新项目平台。就是这样!点击ok,关闭配置管理器,然后ctrl+shift+S全部保存(包括csproj + sln)。

【讨论】:

  • 这是“控制台应用程序默认为 x86”行为的一部分吗? (又名,您的单元测试项目是 exe 还是 dll)
  • 它是一个 exe。您可能会在那里找到一些东西 - 我认为我添加它的方式是作为控制台应用程序,但随后将输出类型更改为 WinExe 而不是 Exe。它已经设置好,所以 F5 会启动 NUnit Gui-Runner
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 2018-03-17
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多