如何自动增加.NET Core项目的版本(例如“1.0.*”)?

问题描述 投票:0回答:4

在旧的.NET框架中,您可以设置

[assembly: AssemblyVersion("1.0.*")]
,编译器会自动递增版本。

使用.NET core,我尝试了各种方法,但无法使其自动递增。

  • 我已将
    <Deterministic>False</Deterministic>
    <AssemblyVersion>1.0.*</AssemblyVersion>
    添加到每个类似问题的 .csproj 中。代码编译但版本保持不变
  • 我尝试过同样的事情,但使用
    <Version>1.0.*</Version>
    标签,如此处描述。这实际上将产品版本设置为 1.0.*(带星号)。
  • 我已在“属性属性/包”页面中设置了“程序集版本”。似乎也没有做任何事情。

这些似乎都不起作用。我错过了一些简单的事情吗?这只是一个标准的 .NET Core Web 项目。

c# .net asp.net-core .net-core versioning
4个回答
19
投票

我之前实现的一种简单方法是读取当前版本并将其加一,这样您就可以使用命令行获取当前版本并加一。

话虽如此,可以对 .net core 项目执行以下操作:

在 .csproj 文件中,添加以下内容:

<PropertyGroup>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <Deterministic>false</Deterministic>
</PropertyGroup>

在您的代码中,例如,在入口点类中,添加以下内容:

using System.Reflection;

[assembly: AssemblyVersion("1.0.*")]

当您构建代码时,它将获得类似 1.0.8419.40347 的版本。

要进行更多自定义,请查看这篇文章:https://sachabarbs.wordpress.com/2020/02/23/net-core-standard-auto-incrementing-versioning/

另外,我添加了这个链接:

相当于dotnet core/csproj中的AssemblyInfo

我也将这种努力用于 Visual Studio:

https://marketplace.visualstudio.com/items?itemName=PrecisionInfinity.AutomaticVersions


2
投票

Maytham 的解决方案很好,但还有一个解决方案可以让您同时实现

  • 从 csproj 设置生成 AssemblyInfo
  • 使用(自动生成的)程序集版本自动填充文件版本:

为此,您只需使用

GenerateAssemblyFileVersionAttribute
设置禁止自动生成 FileVersion 属性即可:

<PropertyGroup>
    <AssemblyVersion>1.0.*</AssemblyVersion>
    <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
    <Deterministic>false</Deterministic>
</PropertyGroup>

(此技术归功于这个答案。)


2
投票

我使用了这篇文章: https://www.codeproject.com/Articles/5260362/NET-Core-Standard-Auto-Incrementing-Versioning

以及此处提供的信息,用于在年.月.日.增量上生成应用程序内部版本号。

<VersionSuffix>$([System.DateTime]::UtcNow.ToString(yyyy.MM.dd.mmff))</VersionSuffix>
<AssemblyVersion Condition=" '$(VersionSuffix)' == '' ">0.0.0.1</AssemblyVersion>
<AssemblyVersion Condition=" '$(VersionSuffix)' != '' ">$(VersionSuffix)</AssemblyVersion>
<Version Condition=" '$(VersionSuffix)' == '' ">0.0.1.0</Version>
<Version Condition=" '$(VersionSuffix)' != '' ">$(VersionSuffix)</Version>

<GenerateAssemblyFileVersionAttribute >false</GenerateAssemblyFileVersionAttribute >
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<Deterministic>false</Deterministic>
<GenerateAssemblyTitleAttribute>true</GenerateAssemblyTitleAttribute>
<GenerateAssemblyConfigurationAttribute>true</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>true</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>true</GenerateAssemblyProductAttribute>
<GenerateAssemblyCopyrightAttribute>true</GenerateAssemblyCopyrightAttribute>
<GenerateAssemblyVersionAttribute>true</GenerateAssemblyVersionAttribute>
<GenerateAssemblyInformationalVersionAttribute>true</GenerateAssemblyInformationalVersionAttribute>

0
投票

我知道这个帖子确实很老了,但它仍然是 Google 上出现的第一件事。经过长时间研究,我终于找到了一个轻量级的解决方案,让您可以使用自己的自定义 C# 代码来定义版本。

基本上,使用 T4 模板生成版本号(使用您喜欢的任何代码和逻辑),然后使用 .csproj 文件中的 MSBuild 静态方法调用将结果读入版本属性。

分步示例:

在项目的根级别创建一个名为“version.tt”的新文件并插入以下代码:

<#@ output extension=".txt" #>
<#
int major = 1;
int minor = 2;
int patch = 3;
int build = (int)((DateTime.UtcNow - DateTime.Parse("2020-01-01")).TotalDays);
string output = major + "." + minor + "." + patch + "." + build;
#>
<#= output #>

保存后,应立即创建一个名为“version.txt”的文件,其中包含诸如“1.2.3.123”之类的版本字符串,该字符串将来将由 Visual Studio 自动更新。

然后进入您的 .csproj 并定义如下版本:

<Version>$([System.IO.File]::ReadAllText(version.txt))</Version>
© www.soinside.com 2019 - 2024. All rights reserved.