6

我正在 TeamCity 中构建一个启用 NuGet 包还原的项目。

我有两个构建步骤:

  • NuGet 安装程序
  • 微软构建

其中一个项目安装了来自官方提要的 log4net-package。(但不要挂在哪个包裹上)

我的问题是当 TeamCity 运行第一步时,它在 nuget-installer 步骤中失败并显示以下消息:无法找到包 'log4net' 的版本 '2.0.3'。

因此,在尽我所能找到解决方案中的任何错误之后,我尝试:

  1. 禁用 NuGet 安装程序步骤
  2. 运行我的构建——这显然失败了,因为它没有包(见下文)
  3. 启用 NuGet 安装程序步骤
  4. 重新运行构建

[编辑] 关于 3. 步骤,正如 John H. 指出的那样,MSBuild 理想情况下应该能够重建包,所以我不需要 NuGet Installer 步骤。当我尝试在没有 nuget 安装程序步骤的情况下构建解决方案时出现的错误与我安装的 OctoPack-package 有关:

OctoPack 无法运行,因为 NuGet 包在构建运行之前已还原,并且目标文件在构建开始时不可用。请重新构建项目以在构建中包含这些包。您可能还需要确保您的构建服务器不会在每次构建之前删除包

然后它成功了..为什么?

有人对我的问题有一些见解吗?

更多背景:

我认为这与章鱼部署包有关。我在 teamcity 服务器上安装了章鱼部署插件,并且在 MSBuild 步骤中勾选了运行 OctoPack 复选框。

我试图卸载 octopack 包并重新安装,但没有成功。

是不是 MSBuild 步骤上的 NuGet 包还原与章鱼插件相结合会导致我的问题?

[部分解决] 我仍然不确定为什么我在 log4net-package 上收到错误。我运行 NuGet 安装程序作为自动构建的第一步,由于构建的性质,最终证明这是正确的做法。

我承认我不(总是)在更新包时阅读“新功能”。将 Octopack 从 2.0.26 升级到 3.0.19 时,其中一项更改是您不再需要签入 .octopack 文件夹。所以我真的能理解为什么构建在签入时找不到目标文件。

现在我已经:

  • 升级到 Octopack 3
  • 从版本控制中删除 .octopack 文件夹
  • (再次)在 teamcity 中启用了 nuget 安装步骤

并且构建运行良好。

感谢大家的帮助!我现在是一个受过更好教育的人:)

[已删除] 无关信息

4

1 回答 1

3

解决方案是在 MSBuild 运行的还原步骤之前运行 Nuget 还原。

如果必须还原包,则 MSBuild 步骤将停止。在 MSBuild 运行之前进行还原意味着它不必进行还原。此.NET Framework 博客文章中讨论了此解决方案。

Octopus Deploy 团队的回应在这里

同样的问题可能会导致 TFS 失败 - 请参阅RinoTom答案。我使用Continua CI并在 MSBuild 步骤之前添加了一个命令行步骤来运行 Nuget 还原。

于 2014-02-17T16:56:52.340 回答