这个问题在这里已有答案:
我想存储一组在构建时自动递增的整数:
int MajorVersion = 0;
int MinorVersion = 1;
int Revision = 92;
当我编译时,它将自动递增 Revision
. 当我构建安装项目时,它将增加 MinorVersion
(我可以手动执行此操作) . MajorVersion
只会手动递增 .
然后我可以在菜单Help / About中向用户显示版本号:
Version: 0.1.92
怎么能实现这一目标?
这个问题不仅要求如何拥有自动递增版本号,还要求如何在代码中使用它,这是一个比其他更完整的答案 .
9 回答
如果将AssemblyInfo类添加到项目中并将AssemblyVersion属性修改为以星号结尾,例如:
Visual Studio将根据these rules为您增加最终数字(感谢galets,我完全错了!)
要在代码中引用此版本,以便可以将其显示给用户,请使用反射 . 例如,
你应该知道的两个重要问题
来自@ ashes999:
同样值得注意的是,如果同时指定
AssemblyVersion
和AssemblyFileVersion
,则不会在.exe上看到此内容 .来自@ BrainSlugs83:
仅将第4个数字设置为
*
可能不好,因为版本不会总是递增 . 第3个数字是自2000年以来的天数,第4个数字是自午夜以来的秒数(除以2)[不是随机数] . 因此,如果您在一天的最后一天和第二天的早些时候构建解决方案,则后一版本将具有较早的版本号 . 我建议始终使用X.Y.*
而不是X.Y.Z.*
,因为您的版本号将始终以这种方式增加 .如果您在构建和修订中添加星号,则visual studio将使用自2000年1月1日以来的天数作为内部版本号,并将自午夜以来的秒数除以2作为修订版 .
一个更好的救生解决方案是http://autobuildversion.codeplex.com/
它就像一个魅力,它非常灵活 .
版本中的星标(如“2.10.3 . *”) - 它很简单,但数字太大了
AutoBuildVersion - 看起来很棒,但它不适用于我的VS2010 .
@DrewChapin的脚本有效,但我不能在我的工作室中为Debug预构建事件和Release预构建事件设置不同的模式 .
所以我改了一下脚本...... commamd:
和脚本(这适用于“调试”和“发布”配置):
Here's the quote on AssemblyInfo.cs from MSDN:
这有效地说,如果你将1.1 . *放入汇编信息中,只有内部编号会自动增加,并且不会在每次构建之后发生,而是每天都会发生 . 修订号将改变每个构建,但是随机地,而不是以递增的方式 .
对于大多数用例来说,这可能就足够了 . 如果这不是您正在寻找的东西,那么您将不得不编写一个脚本,该脚本会在预构建步骤中自动增加版本#
使用AssemblyInfo.cs
在App_Code中创建文件:并填写以下内容或使用Google获取其他属性/属性的可能性 .
AssemblyInfo.cs
AssemblyVersion是你真正追求的部分 .
然后,如果您正在使用网站,任何aspx页面或控件,您可以添加<Page>标记,如下所示:
(当然用适当的变量替换folderpath) .
我不认为你需要以任何方式为其他类添加编译器选项; App_Code中的所有内容在编译时都应该收到版本信息 .
希望有所帮助 .
您可以使用构建脚本(例如Build Versioning)执行更高级的版本控制
你可以使用T4 templating mechanism in Visual Studio to generate the required source code from a simple text file:
这是我对T4建议的实现...这将在每次构建项目时增加构建号,而不管所选的配置(即Debug | Release),并且每次执行Release构建时它都会增加修订号 . 您可以通过 Application ➤ Assembly Information... 继续更新主要和次要版本号
为了更详细地解释,这将读取现有的
AssemblyInfo.cs
文件,并使用正则表达式查找AssemblyVersion
信息,然后根据TextTransform.exe
的输入增加修订版本和内部版本号 .删除现有的
AssemblyInfo.cs
文件 .在其位置创建
AssemblyInfo.tt
文件 . 保存T4文件后,Visual Studio应创建AssemblyInfo.cs
并将其与T4文件分组 .您可以尝试使用UpdateVersion by Matt Griffith . 现在已经很老了,但效果很好 . 要使用它,您只需要设置一个指向AssemblyInfo.cs文件的预构建事件,应用程序将根据命令行参数相应地更新版本号 .
由于应用程序是开源的,我还创建了一个版本,使用格式(主要版本)增加版本号 . (次要版本) . ([year] [dayofyear]) . (增量) . 有关此内容和修订代码的更多信息,请参阅我的博客文章Assembly Version Numbers and .NET .
Update: I've put the code for my modified version of the UpdateVersion application on GitHub: https://github.com/munr/UpdateVersion