【问题标题】:TFS 2013 Build Controller Not Respecting NuGet Package RestoreTFS 2013 构建控制器不尊重 NuGet 包还原
【发布时间】:2015-08-19 16:57:02
【问题描述】:

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

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

在我的 TFS 的 BuildProcessTemplate 文件夹中,我没有有一个 TfvcTemplate.12.xaml,我只有 DefaultTemplate.11.1.xaml,而且我从未编辑过 xaml 文件,我看到有一个工具箱NuGetRestore的项目

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

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

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

【问题讨论】:

    标签: tfsbuild azure-devops nuget-package-restore


    【解决方案1】:

    要使用 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 按钮,浏览版本控制中的流程文件。

    【讨论】:

    • 我阅读了一篇类似的博客文章,其中指导我删除了 nuget .targets 和 .exe 文件并编辑了 proj 文件,但是它没有提到删除 true。从那以后我已经这样做了,并做了另一个失败的构建 - 与我最初所说的相同的问题 - 没有 NuGet 包正在恢复。
    • 构建模板不再添加到源代码管理中。如果您在 Visual Studio 的构建编辑菜单中点击下拉 Dow 以选择模板,那么您可以选择新模板。
    • 感谢@MrHinsh,我找到了更改下拉列表的位置,它似乎解决了我的问题。 This 也有帮助。
    • 我遇到了同样的问题。我正在使用 AzureContinuousDeployment.11.xaml 模板。你知道这里面是否有nuget包恢复任务吗?我正在搜索 xaml 文件,但找不到与 nuget 相关的任何内容。
    • @TWilly Nuget Restore 已添加到 2013 (v12) 模板中。您可以编辑 2012 模板并拖入 NugetRestore。我在执行实际构建(而不是清理)的 MsBuild 步骤之前添加了 NuGetRestore 步骤。我添加的唯一属性是将变量 {localProject} 传递给 Solutions 属性。这与传递给 MsBuild Project 变量的变量相同。
    【解决方案2】:

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

    从 Ebbo 的博文中,对我来说文件内容很简单

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

    遗憾的是,我不明白为什么这会改变我的一切。但它现在正在工作,我正在继续!

    更新:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-27
      • 2015-01-11
      • 1970-01-01
      • 2017-08-16
      • 2023-03-04
      • 1970-01-01
      • 2014-01-12
      • 2017-12-04
      相关资源
      最近更新 更多