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 了解详细信息。
- 在 VS IDE 中,转到工具 -> 选项 -> NuGet 包管理器 -> 启用允许 NuGet 下载丢失的包。
- 从 .nuget 文件夹中删除 NuGet.exe 和 NuGet.targets 文件。这两个文件也从版本控制中删除。
- 从 .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" />
我们将 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 了解详细信息。
- 在 VS IDE 中,转到工具 -> 选项 -> NuGet 包管理器 -> 启用允许 NuGet 下载丢失的包。
- 从 .nuget 文件夹中删除 NuGet.exe 和 NuGet.targets 文件。这两个文件也从版本控制中删除。
- 从 .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" />