簡體   English   中英

從 csproj 獲取 Nuget package 步驟中 Azure DevOps 中的版本號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM