TFS 2013 构建控制器不遵守 NuGet 包还原

TFS 2013 Build Controller Not Respecting NuGet Package Restore

我们将 VSO 与本地构建控制器 (TFS 2013) 结合使用。我在 Visual Studio 的“选项”菜单中启用了 NuGet 包还原(从使用 .nuget 文件夹的旧的、已弃用的方式迁移出来)。

在 VS 中,恢复包工作正常,但是构建控制器不恢复 NuGet 包。构建控制器在服务帐户下运行,如果我将 VS(在构建服务器上)作为服务帐户启动并构建我的代码,它会恢复包。我怎样才能让构建控制器恢复丢失的包?

在我的 TFS 的 BuildProcessTemplate 文件夹中,我没有 TfvcTemplate.12.xaml,我只有 DefaultTemplate.11.1.xaml,因为我从未编辑过 xaml 文件,我看到 NuGetRestore

有一个工具箱项

我不确定如何继续,我有点想知道为什么我没有 TfvcTemplate.12.xaml 模板,但既然我没有,我怎样才能得到我的构建 server/controller 恢复 NuGet 包?

我已经编辑了服务帐户的 NuGet.config 文件(位于 AppData 文件夹中)以及位于我的解决方案根目录的 .nuget 文件夹中的 NuGet.config 文件,但是我的构建总是因为缺少依赖项(NuGet 包)而失败。

有什么办法可以解决这个问题吗?另外,如何获得 TfvcTemplate.12.xaml 构建模板?

要启用使用 TFS 构建还原 NuGet 包,请按照以下步骤操作。查看此 blog 了解详细信息。

  1. 在 VS IDE 中,转到工具 -> 选项 -> NuGet 包管理器 -> 启用允许 NuGet 下载丢失的包。
  2. 从 .nuget 文件夹中删除 NuGet.exe 和 NuGet.targets 文件。这两个文件也从版本控制中删除。
  3. 从 .proj 文件中删除 下列标签:

    1. <RestorePackages>true</RestorePackages>

    2.<Import Project="$(SolutionDir)\.nuget\nuget.targets" />  

    3. <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">  
        <PropertyGroup>
            <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, 
    see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
        </PropertyGroup>
        <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
    </Target>

关于找不到TfvcTemplate.12.xaml流程模板的另一个问题,您可以先在VSO中创建一个新的团队项目,下载流程文件并将其签入版本控制。然后编辑构建定义,单击Process选项卡上的New按钮,浏览版本控制中的process文件。

对于任何遇到我遇到的问题的人(一些但不是所有的包都在构建服务器上恢复),对我来说最后的难题是在我的根目录中添加一个 NuGet.config解决方案,与 .SLN 文件同级,正如 David Ebbo 在此处解释的那样:http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html.

来自 Ebbo 的博客post,我的文件内容很简单

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </packageSources>
</configuration>

遗憾的是,我不明白为什么这改变了我。但它现在正在运行,我会继续前进!

更新:

NuGet API URL 已更改为 v3(截至 2016 年 9 月)。来自 https://www.nuget.org/

<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />