逗人
请帮我解决链接软件包的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)值?
谢谢
答案 0 :(得分:1)
简单的方法是在构建任务之前通过命令行任务调用nuget update command,然后使用包含引用的项目选项通过 Nuget任务打包项目已检查。
答案 1 :(得分:1)
我已经实施了@starianchen建议的解决方案 要做到这一点,我必须
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扩展程序。此扩展允许您轻松链接构建并将参数从一个构建传递到下一个构建。