一尘不染

如何具有自动递增的版本号(Visual Studio)?[重复]

c#

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

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

当我编译时,它会自动递增Revision。当我建立安装项目时,它会增加MinorVersion(我可以手动完成)。MajorVersion只会手动增加。

然后,我可以在菜单“帮助/关于”中向用户显示版本号,如下所示:

  版本:0.1.92

如何做到这一点?

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


阅读 654

收藏
2020-05-19

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

您应该知道的三个重要陷阱

来自@ ashes999:

还值得注意的是,如果同时指定AssemblyVersionAssemblyFileVersion,则不会在.exe中看到此内容。

来自@ BrainSlugs83:

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

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

(该主题于2009年开始)

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

2020-05-19