使用DotNetCore / Standrad时,我如何在构建时使用项目版本?

问题描述

我可以通过将标签添加到.csproj文件来设置项目版本, 但我想在管道中以编程方式更改该值。

我共同编写了一个脚本来完成该任务,但是感觉很草率。

这一定是通过CLI进行此操作的一种方法,但我只是找不到它。

是否存在与我正在忽略的命令类似的命令?

dotnet build -project-version 1.2.3

如果不存在命令,您如何在管道中设置项目构建版本?

解决方法

我在管道中使用以下内容。

dotnet build -p:VersionPrefix="$(buildNumber)" -p:VersionSuffix="$(buildPipline)"

并且在我的csproj文件中

 <PropertyGroup>
    ...
    <VersionPrefix>1.0.1</VersionPrefix>
    <VersionSuffix>local</VersionSuffix>
  </PropertyGroup>

要获取代码中的版本号,我使用以下

public static string Version => System.Reflection.Assembly.GetEntryAssembly().GetCustomAttribute<System.Reflection.AssemblyInformationalVersionAttribute>().InformationalVersion;

如果您使用的是Azure管道,则可以添加一个powershell脚本,该脚本根据日期和时间声明版本。

 Write-Host "Generating Build Number"
$baseDate = [datetime]"01/01/2019"
$currentDate = [System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date),'Eastern Standard Time')
$interval = NEW-TIMESPAN –Start $baseDate –End $currentDate
$days = $interval.Days
$hour = $currentDate.ToString("HH")
$minute = $currentDate.ToString("mm")

$version = "1.0.$days.$hour$minute"
$version_npm = "1.$days.$($currentDate.ToString("Hmm"))"
if($currentDate.ToString("HH") -eq "00")
{
    $version_npm = "1.$days.25$($currentDate.ToString("mm"))"
}
Write-Host "Version: $version"
Write-Host "npm Version: $version_npm"

Write-Host "##vso[task.setvariable variable=buildNumber]$version"
Write-Host "##vso[task.setvariable variable=buildNumber_npm]$version_npm"
,

您可以尝试使用Assembly Info扩展名,该扩展名可以更新项目ASTParser parser = ASTParser.newParser(AST.JLS14); parser.setSource(javaFileContents.get(filePath).toCharArray()); CompilationUnit compilationUnit = (CompilationUnit)parser.createAST(null); 文件和.Net Core / .Net Standard项目文件AssemblyInfo。有关如何配置扩展程序的详细说明,请参见以下链接:

https://github.com/BMuuN/vsts-assemblyinfo-task/wiki/Versioning

,

我发现最简单的方法是使用.csproj文件中的环境变量,如下所示:

  <PropertyGroup Condition="'$(APPVERSION)' != ''">
    <InformationalVersion>$(APPVERSION)</InformationalVersion>
  </PropertyGroup>

然后在构建服务器中设置环境变量。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...