Azure devops 在VSTS中为两个相关软件包设置构建和发布

Azure devops 在VSTS中为两个相关软件包设置构建和发布,azure-devops,nuget-package,Azure Devops,Nuget Package,亲爱的 请帮助我进行链接包的VSTS生成配置 我在解决方案中有两个项目,比如接口和Dto。接口包含多个接口定义,Dto项目实现接口并引用接口。每个项目都有专用的nuspec文件,并在vsts包提要中作为专用包提供 为了实现这一点,我创建了nuspec文件,该文件根据定义的项目引用包含包依赖项。因此,Dto包取决于以下接口: <package > <metadata> <id>Dto</id> <dependencies&g

亲爱的

请帮助我进行链接包的VSTS生成配置

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

为了实现这一点,我创建了nuspec文件,该文件根据定义的项目引用包含包依赖项。因此,Dto包取决于以下接口:

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

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

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

它生成解决方案,然后从解决方案文件夹中打包和推送所有nuspec文件

如何配置两个包的生成定义,以仅在Interfaces文件夹内容更改时生成Interfaces项目?但如果接口或Dto文件夹内容发生更改,是否要构建Dto包

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

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

$(versionFromFile)。$(修订版:rr)

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

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


谢谢

我建议使用市场上的扩展。此扩展允许您轻松地链接生成并将参数从一个生成传递到下一个生成。

简单的方法是在生成任务之前通过命令行任务调用,然后通过选中“包含引用的项目”选项,通过“Nuget任务”打包项目。

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

  • 删除dto项目对接口的引用,并将接口作为包添加
  • 使用触发器页面上的路径筛选器为解决方案的接口和dto文件夹创建两个生成定义
  • 创建interfaces.sln文件,因为vsts无法生成interfaces.csproj。需要指定sln文件或输出路径
  • 将nuget pack更改为nuget自定义命令,并手动写入接口和dto构建的参数
pack Interfaces\Interfaces.nuspec-version$(BUILD.BUILDNUMBER) -属性“releaseNotes=$(releaseNotes)”-详细详细信息-OutputDirectory$(build.artifactstagingdirectory)

pack Dro\Dto.csproj-version$(BUILD.BUILDNUMBER)-属性 “配置=发布;发布注释=$(发布注释)”-详细 详细信息-OutputDirectory$(build.artifactstagingdirectory) -包括参考项目

请注意,我使用了.csproj文件,该文件具有对应的.nuspec for Dto packing命令。 -通过从依赖项节中删除接口和从文件中删除Dto.dll来修改Dto.nuspec(这些元素通过IncludeReferencedProjects选项添加)。但是,存在dto.xml和相关程序集


这允许我仅在接口包发生更改时更新接口包。打包时的Dto project对生成Dto project时使用的接口包引用具有依赖性。

感谢您的提示,它看起来非常漂亮。为了实现这一点,我将pack命令从nuspec更改为csproj文件,如
nuget-pack-IncludeReferencedProjects Dto.csproj
。但主要的问题是,为了正确获取依赖包版本,我必须在Dto项目中将接口作为包使用。否则,Dto包依赖项中将使用Interfaces.nuspec文件的版本。但包版本是在构建期间设置的。这些项目是紧密耦合的,所以将接口作为专用包看起来并不好。使用接口的更改需要很多步骤更好的方法是只打包一个DTO包,而不是一个接口项目包和一个DTO包,因为DTO项目必须依赖于该接口,而且DTO包版本应该依赖于接口的相应版本,而不是最新版本,您应该发布新版本以进行更改,其他人将在需要时更新版本。我可以将接口和dto与依赖项版本号匹配。将两个项目放在同一个包中是可能的,但是接口被用作一般描述,我不想向其中添加dto实现。