[使用YAML文件格式在Azure DevOps上执行CI时,我试图读取csproj文件以提取有关版本的信息,以创建将遵循csproj版本的NuGet程序包。
我正在使用NuGetCommand@2
进行包装(由于[C0])
是否有内置任务或一种方法可以从csproj文件中提取此信息作为正则表达式并将其传递给versioningScheme: byPrereleaseNumber
?
我相当确定这没有内置的功能,但是您可以使用任何喜欢的脚本语言来解析文件,然后将所需的任何内容“吐出”作为构建变量并在以后使用。这是我一直在做的:
NuGetCommand@2
您显然可以在脚本步骤中执行任何自定义操作,并以您希望的任何方式使用结果。
- script: echo "##vso[task.setvariable variable=dp]$(cat $(Build.Repository.LocalPath)/deployment/dp)"
- script: az group delete -n $(dp)-k8s -y --no-wait
您可以将其添加为提取csproj标记的第一步:
https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md
然后您就可以通过在Yaml中的任意位置调用- script: echo "##vso[task.setvariable variable=version]$(cat 'ProjectDirectory/MyProject.csproj' | grep -oP '(?<=<Version>).*?(?=<\/Version>)')"
来使用它。
$(version)
的意思是“设置一个我以后可以使用的变量”echo "##vso[task.setvariable variable=version]
获取您的csproj内容,然后将其传递给grep,以便我们可以对其执行正则表达式]cat 'ProjectDirectory/MyProject.csproj' | grep
是一个正则表达式,它找到(?<=<Version>).*?(?=<\/Version>)')
标记而不消耗这些标记,因此仅打印其中的内容