![](/img/trans.png)
[英]Azure DevOps NuGet Pack is ignoring csproj package details
[英]Fetch version number in Nuget package step in Azure DevOps from csproj
尝试建立一个构建管道,其中从拉取请求构建的 nuget 后缀为“-unstable”。 但是,我似乎无法获得在其 csproj 文件中定义的正在构建的类库项目的版本。 我已经尝试了我能想到的每一个关键字,但到目前为止,我一直未能找到具有相同问题的文档或其他关键字。
任何帮助,将不胜感激。
以下是相关文件的摘录:
类库.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net462</TargetFramework>
<Version>1.1.0.0</Version>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
</PropertyGroup>
</Project>
ci-file.yaml
variables:
- group: BuildParameters
- name: BuildVersion
${{ if eq(variables['Build.SourceBranchName'], 'master') }}:
value: '$(Version)'
${{ else }}:
value: '$(Version).$(Build.BuildId)-unstable'
steps:
- template: template.yaml
模板.yaml
- task: NuGetCommand@2
displayName: 'NuGet Pack $(...)'
inputs:
command: pack
packagesToPack: '$(...)'
versioningScheme: byEnvVar
versionEnvVar: BuildVersion
根据您的描述,您需要在 csproj 文件中获取版本值。
csproj文件中的版本号不能直接使用变量读取。
为了满足您的要求,您需要添加一个任务来读取 csproj 文件中的版本值并将版本设置为管道变量。 然后您可以使用 Nuget 任务中的版本号。
这是一个示例:PowerShell 脚本
steps:
- powershell: |
$xml = [Xml] (Get-Content .\xxx.csproj)
$version =$xml.Project.PropertyGroup.Version
echo "$version"
echo "$(Build.SourceBranchName)"
if( "$(Build.SourceBranchName)" -eq "master") {
echo "##vso[task.setvariable variable=version]$version "
}else {
$Newversion = "$version.$(Build.BuildId)-unstable"
echo "##vso[task.setvariable variable=version]$Newversion"
}
displayName: 'PowerShell Script'
然后您可以在接下来的任务中使用变量$(version)
。
有关更多信息,您可以参考有关在 Pipeline 中设置变量的文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.