我想存储一组在构建时自动递增的整数:
int MajorVersion = 0; int MinorVersion = 1; int Revision = 92;
当我编译时,它会自动递增Revision。当我构建安装项目时,它会增加MinorVersion(我可以手动执行此操作)。MajorVersion只能手动递增。
Revision
MinorVersion
MajorVersion
然后我可以在菜单帮助/关于中向用户显示版本号:
版本:0.1.92
如何做到这一点?
这个问题不仅询问如何拥有自动递增的版本号,还询问如何在代码中使用它,这是一个比其他人更完整的答案。
如果您将AssemblyInfo类添加到您的项目并将AssemblyVersion属性修改为以星号结尾,例如:
AssemblyVersion
[assembly: AssemblyVersion("2.10.*")]
Visual Studio 将根据这些规则为您增加最终数字(感谢 galets,我完全错了!)
要在代码中引用此版本,以便将其显示给用户,请使用reflection. 例如,
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})";
还值得注意的是,如果同时指定AssemblyVersion和AssemblyFileVersion,您将不会在 .exe 上看到它。
AssemblyFileVersion
仅将第 4 个数字设置为*可能不好,因为版本不会总是递增。 第 3 个数字是自 2000 年以来的天数 , 第 4 个数字是自午夜以来的秒数(除以 2)[IT IS NOT RANDOM] 。因此,如果您在一天的晚些时候构建解决方案,而在第二天的早些时候构建解决方案,则较晚的构建将具有较早的版本号。我建议始终使用X.Y.*,而不是X.Y.Z.*因为您的版本号总是会以这种方式增加。
*
X.Y.*
X.Y.Z.*
(此主题始于 2009 年) 指定的版本字符串包含通配符,与确定性不兼容。从版本字符串中删除通配符,或禁用此编译的确定性。
(此主题始于 2009 年)
指定的版本字符串包含通配符,与确定性不兼容。从版本字符串中删除通配符,或禁用此编译的确定性。