小编典典

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

all

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

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

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

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

  版本:0.1.92

如何做到这一点?

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


阅读 132

收藏
2022-03-11

共1个答案

小编典典

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

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

Visual Studio 将根据这些规则为您增加最终数字(感谢
galets,我完全错了!)

要在代码中引用此版本,以便将其显示给用户,请使用reflection. 例如,

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})";

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

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

仅将第 4 个数字设置为*可能不好,因为版本不会总是递增。 第 3 个数字是自 2000 年以来的天数第 4
个数字是自午夜以来的秒数(除以 2)[IT IS NOT RANDOM]

。因此,如果您在一天的晚些时候构建解决方案,而在第二天的早些时候构建解决方案,则较晚的构建将具有较早的版本号。我建议始终使用X.Y.*,而不是X.Y.Z.*因为您的版本号总是会以这种方式增加。

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

(此主题始于 2009 年)

指定的版本字符串包含通配符,与确定性不兼容。从版本字符串中删除通配符,或禁用此编译的确定性。

2022-03-11