在旧的.NET框架中,您可以设置
[assembly: AssemblyVersion("1.0.*")]
,编译器会自动递增版本。
使用.NET core,我尝试了各种方法,但无法使其自动递增。
<Deterministic>False</Deterministic>
和 <AssemblyVersion>1.0.*</AssemblyVersion>
添加到每个类似问题的 .csproj 中。代码编译但版本保持不变<Version>1.0.*</Version>
标签,如此处描述。这实际上将产品版本设置为 1.0.*(带星号)。这些似乎都不起作用。我错过了一些简单的事情吗?这只是一个标准的 .NET Core Web 项目。
我之前实现的一种简单方法是读取当前版本并将其加一,这样您就可以使用命令行获取当前版本并加一。
话虽如此,可以对 .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
Maytham 的解决方案很好,但还有一个解决方案可以让您同时实现
为此,您只需使用
GenerateAssemblyFileVersionAttribute
设置禁止自动生成 FileVersion 属性即可:
<PropertyGroup>
<AssemblyVersion>1.0.*</AssemblyVersion>
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
<Deterministic>false</Deterministic>
</PropertyGroup>
(此技术归功于这个答案。)
我使用了这篇文章: 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>
我知道这个帖子确实很老了,但它仍然是 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>