3

我最近开始使用 TFS 为我们的软件套件实现自动化构建。我试图在构建服务器上尽可能少地安装,并希望避免将第三方库签入我们的源存储库。

我们的一个项目由于缺少依赖项而导致构建失败:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

这并不奇怪,因为我没有在构建服务器上安装 Visual Studio(或 Team Explorer 等)。为了解决此问题,我尝试将 NuGet 与自动包还原一起使用以提供适当的库 (MSBuild.Microsoft.VisualStudio.Web.targets)。我已经在这里和其他地方阅读了大量的帖子,但无法让它正常工作。基本上,我:

  1. 在构建服务器上设置环境变量:EnableNuGetPackageRestore=true
  2. 按照以下说明操作: http: //docs.nuget.org/docs/workflows/using-nuget-without-committing-packages
  3. 将 SolutionDir.nuget 中的所有文件添加到 TFS 存储库。
  4. 将包文件夹和 respositories.config 添加到 TFS 存储库。
  5. 验证 nuget.targets 是从有问题的项目中引用的。
  6. 验证有问题的项目中的“RestorePackages”设置为 true。
  7. 搁置所有这些物品,并使用适当的搁置组排队进行私人构建。

构建运行,但从未下载 nuget 包。除此之外,我在构建日志文件中看不到任何“RestoreCommand”(或 nuget.targets 中的其他项目)的任何日志条目。就像 nuget.targets 被完全忽略一样。我希望我只是看这个太久了,错过了一些简单的步骤。

编辑:我应该提到该解决方案在本地机器上构建良好。我已更新项目引用以引用 NuGet 中的库。如果我删除所有本地软件包,它会下载它们并正确构建。

4

1 回答 1

1

我知道这是一个老问题,但这是我如何让它工作的。

我按照此处的说明进行操作,因此不必将包文件夹添加到 TFS: http ://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

然后我不得不使用这个链接http://docs.nuget.org/docs/reference/package-restore-with-team-build中提到的简单构建文件,它只是预先触发包恢复。

我必须从构建文件中更改的只是我的解决方案文件的路径和我的 nuget.exe 不同。

然后我将 TFS 配置为使用 build.proj 文件而不是解决方案。

请注意,我还升级到了 nuget 2.7,因此我不必包含 .targets 文件。

于 2013-11-08T14:32:18.947 回答