我最近不得不解决这个问题:如何知道工具的哪个版本已部署?如何自动化版本号,以便不会意外使用旧版本?
过去,这些信息存储在 AssemblyInfo.cs 的属性中。在 .NET Core 中,这些属性现在由项目属性在运行时生成。
Andrew Lock 解释了各种属性的用法,例如 Version、VersionPrefix、VersionSuffix、AssemblyVersion、FileVersion、PackageVersion 和 InformationalVersion。
最重要的是 Version、VersionPrefix 和 VersionSuffix。因为 Version 用作其他属性的默认值。如果没有显式值,则可以将 Version 计算为 VersionPrefix-VersionSuffix。
引用文章中的话:
“Version”属性是构建.NET Core应用程序时最常设置的值。它控制构建输出中所有版本号的默认值,例如“PackageVersion”和“AssemblyVersion”,因此通常被用作应用程序/库版本的单一来源。
如果使用
System.Commandline,则通过“--version”显示的版本信息是“InformationalVersion”,其默认值来自“Version”。
默认的“VersionPrefix”是“1.0.0”,后缀为空,导致版本为“1.0.0”。
*公式
好处在于这些属性可以有公式。我能够通过将这个公式添加到不包含其他版本信息的“csproj”中,自动生成与日期相关的版本号。
<VersionSuffix>$([System.DateTime]::UtcNow.ToString(`yyyyMMdd-HHmm`))</VersionSuffix>
每次我现在构建我的工具,我会得到像
1.0.0-2021061501836
这样的版本号。
覆盖属性
项目值可以在构建过程中被覆盖,可以通过指定显式版本后缀或为项目属性指定显式值来实现。例如:
dotnet build --configuration Release --version-suffix preview2-final
或者
dotnet build --configuration Release /p:Version=1.2.3-preview2-final
这样,自动化的发布流程可以指定一个新版本来覆盖项目文件中设置的任何内容。
dotnet build
中传递显式值来覆盖。还可以使用表达式计算基于日期的值等。我使用<VersionSuffix>$([System.DateTime]::UtcNow.ToString(
yyyyMMdd-HHmm))</VersionSuffix>
出于这个原因。 - Panagiotis Kanavoscsproj
中完成。 - Panagiotis KanavosAssemblyInfo.cs
,而不是如何使用项目属性。这包括获得 381 个赞的被接受答案。只有那些已经知道答案的人才会意识到正确的答案是这个。 - Panagiotis Kanavos