为VSTS中的两个相关包设置构建和发布

时间:2018-01-22 11:23:21

标签: azure-devops nuget-package

逗人

请帮我解决链接软件包的VSTS构建配置

我在解决方案中有两个项目,比如Interfaces和Dto。接口包含多个接口定义,Dto项目实现接口并引用接口。每个项目都有专门的nuspec文件,并在vsts包Feed中作为专用包提供。

为了实现这个目的,我根据定义的项目引用创建了包含包依赖关系的nuspec文件。所以Dto包依赖于以下接口:

<package >
  <metadata>
    <id>Dto</id>
    <dependencies>
      <dependency id="Interfaces" version="0.4.0" />
    </dependencies>

这些项目托管在相同的VSTS git源代码存储库(但不同的文件夹)

现在我有一个简单的构建定义,由master分支中的更改触发。

它构建解决方案,而不是打包并从解决方案文件夹中推送所有nuspec文件。

如果更改了Interfaces文件夹内容,如何为两个包配置构建定义以构建Interfaces项目?但是如果更改了Interfaces或Dto文件夹内容,要构建Dto包吗?

我认为可以创建两个由不同Path过滤器触发的构建定义。但问题是我需要从Dto nuspec文件到Interfaces包设置正确的依赖版本引用。

要设置包版本,我使用全局构建定义变量$ versionFromFile,其中包含版本号的次要和主要部分,如0.4和包版本的第三部分的vsts版本。它以内置编号格式进行参数化,如:

$(versionFromFile)$(启:RR)。

每个包构建自动增加修订号,如0.4.1,0.4.2。当我需要更改主要包版本号时,我更新构建定义变量值,并且修订开始从零开始计数。要设置包版本,我将nuget pack任务“自动包版本控制”参数配置为“使用内部版本号”值。

因此,对于两个构建定义,我需要以某种方式从Dto包引用到Interfaces包的最后一个版本。不幸的是,我不知道如何从Dto包构建定义引用到最新的Interfaces构建定义版本号。我发现的唯一一个想法是将Interfaces构建版本号保存到文件中。然后从Dto构建定义读取它到新变量并使用它。然而它看起来有点难看。有没有更好的方法从一个构建定义引用到另一个构建定义$(BUILD.BUILDNUMBER)值?

谢谢

3 个答案:

答案 0 :(得分:1)

简单的方法是在构建任务之前通过命令行任务调用nuget update command,然后使用包含引用的项目选项通过 Nuget任务打包项目已检查。

答案 1 :(得分:1)

我已经实施了@starianchen建议的解决方案 要做到这一点,我必须

  • 将dto项目中的引用移除到接口,并将接口添加为包,而不是
  • 使用“触发器页面上的路径过滤器”
  • 为解决方案的接口和dto文件夹创建两个构建定义
  • 创建interfaces.sln文件,因为vsts无法构建interfaces.csproj。它需要指定sln文件或输出路径
  • 将nuget pack更改为nuget custom命令并手动为接口和dto构建写入参数。
  

pack Interfaces \ Interfaces.nuspec -version $(BUILD.BUILDNUMBER)   -properties&#34; releaseNotes = $(releaseNotes)&#34; -Verbosity Detailed -OutputDirectory $(build.artifactstagingdirectory)

  

打包Dro \ Dto.csproj -version $(BUILD.BUILDNUMBER)-properties   &#34;配置=推出;阅读发布= $(阅读发布)&#34; -Verbosity   详细-OutputDirectory $(build.artifactstagingdirectory)   -IncludeReferencedProjects

请注意,我已经使用了具有相应.nuspec的.csproj文件来进行Dto打包命令。   - 通过从依赖项部分删除接口并从文件中删除Dto.dll来修改Dto.nuspec(这些元素由IncludeReferencedProjects选项添加)。但是有dto.xml和相关的程序集

这允许我仅在更改时更新Interfaces包。打包时的Dto项目依赖于构建Dto项目时使用的Interfaces包引用。

答案 2 :(得分:0)

我建议使用Marketplace中的BuildChain扩展程序。此扩展允许您轻松链接构建并将参数从一个构建传递到下一个构建。