我正在尝试在VSTS上为我的NuGet包设置CI部署,以便在进行新的提交时,包被打包并发送到我的Feed。不幸的是我不知道从哪里开始;我在版本控制方面的大部分经验都是手动更新解决方案中的文件,因此这个问题,所以如果有更好的方法可以让我知道。
我希望该名称是AssemblyInfo.cs文件(“0.0.1”)中的版本号,并附加自动构建的内部版本号。所以最终的结果看起来像“0.0.1.35”。我也想避免在我的命名中使用日期/时间;很多建议是使用这个,但我真的希望保持版本号清洁,以便我可以发布包。
我正在使用'NuGet包'任务,所以我只有'使用日期时间','使用环境变量'或'使用内部版本号'选项。
日期/时间意味着我必须手动输入一个主要,次要和补丁,我更愿意自动。
环境变量,听起来像是这样但我想我错过了我应该放在这个领域的内容。
非常感谢任何帮助!
答案 0 :(得分:3)
您是否希望文件版本与NuGet包版本匹配?如果是这样,您可以使用以下解决方案。
默认情况下,NuGet pack命令将使用文件版本作为包版本。要使用此功能获取所需的预期输出,您需要在构建期间更新文件版本。使用VSTS市场中的Update Assembly Info任务可以轻松完成此操作。还有许多其他类似的任务,但是这个任务只允许您修改文件版本的修订版本部分,而与Major,Minor和Build版本无关。
您的构建现在应该创建一个0.0.1。{Build.BuildId}
的Nugetpackage注意:这是使用版本2. *的NuGet任务和版本2. *更新程序集信息任务进行测试。
答案 1 :(得分:1)
简单的工作流程使用环境变量:
Write-Host "##vso[task.setvariable variable= packageVersion;]xxx"
(Logging Commands)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步骤:
构建任务以构建解决方案并将输出目录保存在变量中;
添加PowerShell任务,以FolderPath和FileExtension作为参数来调用脚本;
最后,packageversion应该具有正确的版本
**项目技术:.netcore