VSTS - 使用AssemblyInfo并附加内部版本号

时间:2017-09-26 12:33:46

标签: nuget azure-devops

我正在尝试在VSTS上为我的NuGet包设置CI部署,以便在进行新的提交时,包被打包并发送到我的Feed。不幸的是我不知道从哪里开始;我在版本控制方面的大部分经验都是手动更新解决方案中的文件,因此这个问题,所以如果有更好的方法可以让我知道。

我希望该名称是AssemblyInfo.cs文件(“0.0.1”)中的版本号,并附加自动构建的内部版本号。所以最终的结果看起来像“0.0.1.35”。我也想避免在我的命名中使用日期/时间;很多建议是使用这个,但我真的希望保持版本号清洁,以便我可以发布包。

我正在使用'NuGet包'任务,所以我只有'使用日期时间','使用环境变量'或'使用内部版本号'选项。

  1. 日期/时间意味着我必须手动输入一个主要,次要和补丁,我更愿意自动。

  2. 环境变量,听起来像是这样但我想我错过了我应该放在这个领域的内容。

  3. 我将我的构建名称设置为“$(BuildDefinitionName)_ $(Year:yyyy)。$(Month)。$(DayOfMonth)$(Rev:.r)”但是没有得到我希望的结果。
  4. 非常感谢任何帮助!

3 个答案:

答案 0 :(得分:3)

您是否希望文件版本与NuGet包版本匹配?如果是这样,您可以使用以下解决方案。

默认情况下,NuGet pack命令将使用文件版本作为包版本。要使用此功能获取所需的预期输出,您需要在构建期间更新文件版本。使用VSTS市场中的Update Assembly Info任务可以轻松完成此操作。还有许多其他类似的任务,但是这个任务只允许您修改文件版本的修订版本部分,而与Major,Minor和Build版本无关。

  1. 将更新程序集信息任务添加到您的VSTS帐户
  2. 修改构建定义并将“更新程序集信息”任务添加到构建中。确保它在Visual Studio Build或MSBuild Task之前,因为您需要在构建之前更改程序集信息
  3. 在“更新程序集任务”中设置值以匹配程序集所需的值。默认情况下,它会根据您的要求将Revision设置为$(Build.BuildId)
  4. 在Nuget Pack任务中关闭“自动包版本控制” 将“更新程序集信息”任务添加到构建过程并确保它位于Visual Studio或MSBuild任务之前。
  5. 您的构建现在应该创建一个0.0.1。{Build.BuildId}

    的Nugetpackage

    注意:这是使用版本2. *的NuGet任务和版本2. *更新程序集信息任务进行测试。

答案 1 :(得分:1)

简单的工作流程使用环境变量:

  1. 添加新变量以构建定义(例如packageVersion)
  2. 添加PowerShell任务以获取AssemblyInfo.cs中的版本(您可以参考使用PowerShell script to customize your build process中的代码)
  3. 通过调用Write-Host "##vso[task.setvariable variable= packageVersion;]xxx"Logging Commands
  4. 更新PowerShell脚本中的变量值(步骤2)
  5. 添加NuGet包任务(自动包版本控制:Use an environment variable;环境变量:packageVersion

答案 2 :(得分:0)

我写了这个PowerShell脚本来做到这一点:

param 
( 
    [parameter()][string] $FolderPath, 
    [parameter()][string] $FileExtension 
)
$RegularExpression = [regex] 'AssemblyInformationalVersionAttribute\(\"(.*)\"\)'
$path = Get-Location

# Get the files from folder that ends in $FileExtension content
$assemblyInfoFile = (Get-ChildItem -Path $FolderPath -Force -Recurse -File -Include *$FileExtension).Name

# Get the Content of the file and store it in the  variable 
$fileContent = Get-Content $FolderPath/$assemblyInfoFile

foreach($content in $fileContent)
{
    $match = [System.Text.RegularExpressions.Regex]::Match($content, $RegularExpression)
    if($match.Success) {
        $version = $match.groups[1].value
    }
}

# Check if variable has content
if ($version)
{
    Write-Host $version
    Write-Host ##vso[task.setvariable variable=packageversion]$version
}

要在本地运行脚本:

.\powershellScriptName.ps1 -FolderPath "c:\Git\" -FileExtension "AssemblyInfo.cs"

FolderPath:输出构建解决方案的路径
FileExtension:我们将在其中搜索版本的名称的一部分

VSTS步骤:

  1. 构建任务以构建解决方案并将输出目录保存在变量中;

  2. 添加PowerShell任务,以FolderPath和FileExtension作为参数来调用脚本;

  3. 最后,packageversion应该具有正确的版本

**项目技术:.netcore