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

VSTS-使用AssemblyInfo并附加内部版本号的版本NuGet,nuget,azure-devops,Nuget,Azure Devops,我正在尝试在VST上为我的NuGet包设置CI部署,以便在进行新的提交时,打包一个包并将其发送到我的提要。不幸的是,我不知道从哪里开始;我在版本控制方面的大部分经验都是手动更新解决方案中的文件,因此出现了这个问题,如果有更好的方法,请告诉我 我希望名称是AssemblyInfo.cs文件(“0.0.1”)中的版本号,并附加自动生成的生成号。所以最终的结果看起来像“0.0.1.35”;很多建议都是使用这个,但我真的希望保持版本号干净,这样我就可以发布包了 我正在使用'NuGet pack'任务,因

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

我希望名称是AssemblyInfo.cs文件(“0.0.1”)中的版本号,并附加自动生成的生成号。所以最终的结果看起来像“0.0.1.35”;很多建议都是使用这个,但我真的希望保持版本号干净,这样我就可以发布包了

我正在使用'NuGet pack'任务,因此我只有'Use date time'、'Use environment variable'或'Use the build number'选项

  • 日期/时间意味着我必须手动输入一个主要、次要和补丁,我更喜欢自动输入

  • 环境变量,听起来可能是它,但我想我没有在这个字段中输入什么

  • 我将构建名称设置为“$(BuildDefinitionName)$(Year:yyyy)。$(Month)。$(DayOfMonth)$(Rev.r)”,但没有得到我希望的结果

  • 任何帮助都将不胜感激

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

    默认情况下,NuGet pack命令将使用文件版本作为包版本。要使用此功能获得所需的预期输出,需要在生成过程中更新文件版本。这可以通过VSTS市场的任务轻松完成。还有许多其他类似的任务,但此任务仅允许您修改文件版本的修订部分,而不受主版本、次版本和生成版本的影响

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


    注意:这是使用NuGet任务的版本2.*和Update Assembly info任务的版本2.*测试的。

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

  • 向生成定义添加新变量(例如packageVersion)
  • 添加PowerShell任务以在AssemblyInfo.cs中获取版本(您可以参考使用中的代码)
  • 通过调用
    Write Host“##vso[task.setvariable=packageVersion;]xxx”
    ()更新PowerShell脚本(步骤2)中的变量值
  • 添加NuGet pack任务(自动包版本控制:
    使用环境变量
    ;环境变量:
    packageVersion

  • 为此,我编写了此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:输出生成解决方案的路径
    文件扩展名:名称的一部分,用于搜索版本

    VSTS步骤:

  • 构建一个任务来构建解决方案,并将de output目录保存在一个变量中

  • 添加PowerShell任务以调用以FolderPath和FileExtension为参数的脚本

  • 最后,packageversion应该有正确的版本


  • **项目技术:.netcore

    感谢您提供的解决方案,它很酷,但在使用.nuspec文件时如何实现这一点,请明确,您希望使用“更新程序集信息”任务,但不是对项目文件使用NuGet pack,而是要对nuspec文件使用它?