c# - 如何拥有自动递增的版本号(Visual Studio)?

标签 c# visual-studio versioning

<分区>

我想存储一组在构建时自动递增的整数:

int MajorVersion = 0;
int MinorVersion = 1;
int Revision = 92;

当我编译时,它会自动增加 Revision。当我构建安装项目时,它会增加 MinorVersion(我可以手动执行此操作)。 MajorVersion 只能手动递增。

然后我可以在菜单帮助/关于中向用户显示版本号:

  Version: 0.1.92

如何实现?

这个问题不仅询问了如何拥有一个自动递增的版本号,而且还询问了如何在代码中使用它,这是一个比其他人更完整的答案。

最佳答案

如果您添加 AssemblyInfo类到您的项目并修改 AssemblyVersion 属性以星号结尾,例如:

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

Visual Studio 将根据 these rules 为您递增最终数字。 (感谢 galets,我完全错了!)

要在代码中引用此版本,以便将其显示给用户,您可以使用反射。例如,

Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
DateTime buildDate = new DateTime(2000, 1, 1)
                        .AddDays(version.Build).AddSeconds(version.Revision * 2);
string displayableVersion = $"{version} ({buildDate})";

你应该知道的三个重要问题

来自@ashes999:

还值得注意的是,如果同时指定了 AssemblyVersionAssemblyFileVersion,您将不会在 .exe 上看到它。

来自@BrainSlugs83:

仅将第 4 个数字设置为 * 可能会很糟糕,因为版本不会始终递增。 第三个数字是自 2000 年以来的天数第四个数字是自午夜以来的秒数(除以 2)[这不是随机的]。因此,如果您在某天晚些时候构建解决方案,而在第二天早些时候构建解决方案,则较晚的构建将具有较早的版本号。我建议始终使用 X.Y.* 而不是 X.Y.Z.* 因为您的版本号将始终以这种方式增加。

较新版本的 Visual Studio 会出现此错误:

(this thread begun in 2009)

The specified version string contains wildcards, which are not compatible with determinism. Either remove wildcards from the version string, or disable determinism for this compilation.

See this SO answer which explains how to remove determinism (https://stackoverflow.com/a/58101474/1555612)

关于c# - 如何拥有自动递增的版本号(Visual Studio)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/826777/

相关文章:

c# - Unity脚本MonoBehaviour报错

c# - 在 C# 中循环 SimpleJSON 数组

tfs - Team Foundation Server 2012 的自动版本控制;仅在更改的装配上增加

node.js - 如何在 Node/Express 应用程序中处理 api 版本

c# - 为什么我的模型属性在尝试 POST 时为空?

c# - Debug模式有效。 Release模式会产生大量错误!

visual-studio - 如何修复 ChakraCore NuGet 包错误?

language-agnostic - 项目/代码发布策略

c++ - 格式错误的 C 或 C++ 程序是否保证在 Visual Studio 中的 DEBUG 配置下崩溃

visual-studio - Visual Studio : Load a Project from a Remote Location