65.9K
CodeProject 正在变化。 阅读更多。
Home

集成 NuGet 包还原到 TFS 构建 2013 或更早版本

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2016年11月20日

Ms-PL

6分钟阅读

viewsIcon

9959

了解如何修改默认TFS构建模板并添加NuGet包还原选项。添加一个专门的还原包设置部分。

如果你编写.NET应用程序,很可能你正在使用NuGet包。在构建过程中还原它们有几种方法。旧方法要求在每个解决方案中包含一个特殊的.nuget文件夹以及其他几个文件。我将向你展示如何不使用额外的MSBuild目标来污染你的项目和解决方案。但是,你需要在构建级别集成NuGet还原。因此,我将向你展示如何编辑默认的TFS构建模板添加一个用于NuGet包还原的新步骤。由于新模板内置了还原NuGet包的功能,因此这适用于TFS 2013或更早版本的构建模板。然而,很多人还没有使用新TFS的优势。

还原NuGet包的旧方法

以前,所有解决方案都需要包含一个.nuget文件夹,其中放置了nuget.targets和nuget.exe。它们也需要添加到源代码控制中。此外,你需要将类似以下MSBuild的内容包含到解决方案的每个项目中。

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

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">

<PropertyGroup>

<ErrorText>此项目引用此计算机上缺失的NuGet包。启用NuGet包还原以下载它们。欲了解更多信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105。缺失的文件是 {0}。</ErrorText>

</PropertyGroup>

<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />

</Target>

MSBuild集成还原方法的缺点

  • 它需要在解决方案文件夹中包含额外的文件。
  • 它需要在解决方案中的所有项目中导入一个.targets文件,这可能会在项目在多个解决方案之间共享时引入问题。
  • 如果找不到nuget.targets,项目将无法加载。
  • 如果任何已还原的NuGet包通过targets文件导入扩展了MSBuild,项目将无法成功构建。
  • 除非明确禁用,否则在使用Team Foundation 版本控制时,包会自动添加到其中。

"为了避免所有这些问题,建议将所有使用MSBuild集成还原的项目迁移到使用NuGet 2.7及更高版本的自动还原功能。" 在NuGet官方网站上阅读更多相关内容。有一个关于如何迁移你的项目的简短教程以及指向可以迁移所有项目的PowerShell脚本的链接。简而言之,你需要删除.nuget文件夹并删除前面提到的MSBuild语句。最后一步是将NuGet.exe还原集成到你的构建中。这是本文的主要主题。

TFS构建还原NuGet包

默认模板

1. 找到打开默认的Windows Workflow Foundation构建模板

2. 找到构建项目序列。这发生在Run MSBuild for Project活动中。

我们需要在项目实际构建之前包含新活动。

默认参数

我将为构建模板添加一些新参数(自变量)。

3. 点击参数选项卡添加新参数

添加新参数

下面你可以找到新参数、它们的类型和默认值。

ShouldRestorePackages - 你可以指定是否启用NuGet还原。

NuGetFeedSources - 指定nuget.exe将用于还原包的提要URL。你可以使用“;”作为分隔符指定多个URL。

NuGetExeServerPath - NuGet.exe的默认TFS服务器路径。如果启用包还原,构建将下载它。

TeamCollectionUrl - 放置NuGet.exe的TFS团队集合的URL。

一旦声明,我们就可以通过WWF活动使用这些设置。

添加新的构建序列

4. 添加一个新的,并将For Each Project in BuildSettings.ProjectsToBuild 放入其中。

添加下载 NuGet.exe 序列

5. 添加一个新的If语句,根据ShouldRestorePackages参数决定是否下载NuGet.exe

更改 if 语句的 DisplayName 是一个好习惯。这将为模板调试提供更好的故障排除能力。此外,它还使模板更具可读性。

你可以将DisplayName更改为If ShouldRestorePackages- Download NuGet.exe

6. 添加一个新的Download File Activity,从TFS下载NuGet.exe(当然,你需要先从官方网站下载它,然后签入)

7. 配置LocalPath (文件将下载到哪里)

它将被保存到一个临时文件夹中。然而,正如你在下图中看到的,Path类无法解析。

8. 添加对 System.IO 的导入(点击导入选项卡)

9. 配置版本参数

您需要将版本设置为以下语句 - TfsTeamProjectCollectionFactory.GetTeamProjectCollection(New Uri(TfsCollectionUrl)).GetService(Of VersionControlServer)().GetLatestChangesetId().ToString()

为了使其工作,您需要添加另一个导入。

10. 添加对 Microsoft.TeamFoundation.Client 的导入

11. 配置VersionControlServer参数

您需要将VersionControlServer设置为以下语句: 

TfsTeamProjectCollectionFactory.GetTeamProjectCollection(New Uri(TfsCollectionUrl)).GetService(Of VersionControlServer)()

创建还原 NuGet 包活动

下一步是添加将还原NuGet包的主要活动。它将使用几个参数调用下载的NuGet.exe。

12. 添加一个新的InvokeProcess活动,并再次将其包装在一个新的If语句中。

13. 设置Arguments参数

Arguments设置为 String.Format("restore {0} -source ""{1}""", localBuildProjectItem, NuGetFeedSources)

这样,你就会告诉NuGet.exe从指定的源URL还原当前构建项目的包。

最终你的模板应该看起来像这样。

创建 NuGet 还原包部分

如果你想在你的构建配置中添加一个新的设置选项卡,你需要添加新的元数据。

14. 找到元数据参数,然后点击行末的按钮

15. 为我们之前创建的每个新参数添加新的元数据

首先,指定参数的确切名称,然后可以分配一个显示名称。每个参数的类别应该相同,这将是部分的名称,例如 - 还原包。最后,设置一些适当的描述,以便人们在使用您的模板时能够 orient 自己。

如果您编辑使用新模板的构建定义,您的新设置部分将看起来像这样。

TFS系列到目前为止

1. 使用 C# 代码连接到 TFS 团队项目
2. 使用 C# 代码管理 TFS 测试计划
3. 使用 C# 代码管理 TFS 测试用例
4. 使用 C# 代码管理 TFS 测试套件
5. TFS 将自动化测试与测试用例关联 C# 代码
6. 使用 SSRS 和 TFS 数据仓库的测试用例统计
7. SSRS SQL Server Reporting Services - 报表订阅

文章 在TFS Build 2013或更早版本中集成NuGet包还原 最初发布于 Automate The Planet

所有图片均购买自 DepositPhotos.com ,不可免费下载和使用。
许可协议

© . All rights reserved.