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

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

当我编译时,它会自动增加Revision。当我构建安装项目时,它会增加MinorVersion(我可以手动这样做)。MajorVersion只能手动递增。

然后我可以在菜单Help/About中显示一个版本号给用户:

  Version: 0.1.92

如何实现这一目标?

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


当前回答

您可以使用构建脚本(如build versioning)进行更高级的版本控制

其他回答

你可以尝试使用Matt Griffith的UpdateVersion。它现在很旧了,但工作得很好。要使用它,只需要设置一个指向AssemblyInfo.cs文件的预构建事件,应用程序将根据命令行参数相应地更新版本号。

由于应用程序是开源的,我还创建了一个版本,使用格式(Major version)增加版本号。(小版本)。[一][dayofyear])。(增量)。我已经将UpdateVersion应用程序的修改版本的代码放在GitHub上:https://github.com/munr/UpdateVersion

使用AssemblyInfo.cs

在App_Code中创建文件,并填写以下内容或使用谷歌获取其他属性/属性。

AssemblyInfo.cs

using System.Reflection;

[assembly: AssemblyDescription("Very useful stuff here.")]
[assembly: AssemblyCompany("companyname")]
[assembly: AssemblyCopyright("Copyright © me 2009")]
[assembly: AssemblyProduct("NeatProduct")]
[assembly: AssemblyVersion("1.1.*")]

AssemblyVersion是您真正需要的部分。

然后,如果你在一个网站上工作,在任何aspx页面或控件中,你可以在< page >标签中添加以下内容:

CompilerOptions="<folderpath>\App_Code\AssemblyInfo.cs"

(替换文件夹路径与适当的变量当然)。

我认为你不需要以任何方式为其他类添加编译器选项;App_Code中的所有文件在编译时都应该收到版本信息。

希望这能有所帮助。

您可以使用构建脚本(如build versioning)进行更高级的版本控制

如果您在构建和修订visualstudio中添加星号,则使用自2000年1月1日以来的天数作为构建号,并使用自午夜以来的秒数除以2作为修订。

一个更好的解决方案是http://autobuildversion.codeplex.com/

它工作起来很有魅力,而且非常灵活。

如果您在项目中添加了一个AssemblyInfo类,并将AssemblyVersion属性修改为以星号结尾,例如:

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

Visual studio将根据这些规则为你增加最终的数字(谢谢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:

同样值得注意的是,如果同时指定了AssemblyVersion和AssemblyFileVersion,则在.exe上不会看到此文件。

从@BrainSlugs83:

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

新版本的Visual Studio会给出这样的错误:

(这个帖子开始于2009年) 指定的版本字符串包含与确定性不兼容的通配符。要么从版本字符串中删除通配符,要么禁用此编译的确定性。 看看这个SO答案,它解释了如何消除决定论(https://stackoverflow.com/a/58101474/1555612)