定义控制台应用程序版本,并从应用程序引用版本信息

Jon*_*ood 6 .net c# .net-5

我有一个 .NET 5.0 控制台应用程序。如何创建版本资源,然后在我的应用程序中显示该版本?

过去,我见过一个AssemblyInfo.cs文件。但我在我的新项目中没有看到类似的东西。

Pan*_*vos 5

最近我要解决这个问题:如何知道部署了哪个版本的工具?如何自动化版本号,以免意外使用旧版本?

过去,该信息作为属性存储在 AssemblyInfo.cs 中。在 .NET Core 中,这些属性现在由项目属性在运行时生成。

Andrew Lock解释了如何使用VersionVersionPrefixVersionSuffix、 、AssemblyVersion FileVersion、等各种属性。PackageVersionInformationalVersion

最重要的是VersionVersionPrefixVersionSuffix。这是因为Version被用作其他的默认值。Version反过来可以VersionPrefix-VersionSuffix像没有明确的值一样进行计算。

引用文章:

Version属性是构建 .NET Core 应用程序时最常设置的值。它控制构建输出中嵌入的所有版本号的默认值,例如,PackageVersion因此AssemblyVersion它通常用作应用程序/库版本的单一来源。

如果使用System.Commandline,则显示的版本信息--version默认InformationalVersion来自Version

默认VersionPrefix1.0.0且默认后缀为空,结果为 version 1.0.0

*公式

好处是属性可以有公式。我只需将其添加到csproj不包含其他版本信息的版本号即可自动生成与日期相关的版本号

<VersionSuffix>$([System.DateTime]::UtcNow.ToString(`yyyyMMdd-HHmm`))</VersionSuffix>
Run Code Online (Sandbox Code Playgroud)

现在每次我构建工具时我都会得到类似的版本1.0.0-2021061501836

覆盖属性

可以在构建期间通过指定显式版本后缀或为项目属性指定显式值来覆盖项目值,例如:

dotnet build --configuration Release --version-suffix preview2-final
Run Code Online (Sandbox Code Playgroud)

或者

dotnet build --configuration Release /p:Version=1.2.3-preview2-final
Run Code Online (Sandbox Code Playgroud)

这样,自动发布管道可以指定一个新版本来覆盖项目文件中设置的任何内容