自动更新版本号
我希望每个构建版本都可以增加应用程序的version属性,但是我不确定如何在Visual Studio(2005/2008)中启用此功能。我试图将AssemblyVersion指定为1.0。*,但它并不能完全满足我的需求。
我也在使用设置文件,并且在较早的尝试中,当程序集版本更改时,由于应用程序在另一个目录中查找设置文件,因此我的设置被重置为默认设置。
我希望能够以1.1.38的形式显示版本号,因此当用户发现问题时,我可以记录他们正在使用的版本,并告诉他们如果具有旧版本,则进行升级。
对版本控制如何工作的简短解释也将不胜感激。内部版本号和修订号何时增加?
解决方案:
使用"内置"的东西,我们将无法做到,因为使用1.0。*或者1.0.0。*会用编码的日期/时间戳替换修订和内部版本号,这通常也是一种好方法。
有关更多信息,请参见/ v标记中的Assembly Linker文档。
至于自动递增数字,请使用AssemblyInfo任务:
AssemblyInfo任务
可以将其配置为自动增加内部版本号。
有2个陷阱:
版本字符串中的4个数字中的每个数字都限制为65535. 这是Windows的限制,不太可能得到解决。为什么内部版本号限制为65535?与Subversion一起使用时需要进行一些小的更改:使用MSBuild在生成时生成程序集版本信息(包括SubVersion修复程序)
这样就可以很容易地获取版本号:
Version v = Assembly.GetExecutingAssembly().GetName().Version; string About = string.Format(CultureInfo.InvariantCulture, @"YourApp Version {0}.{1}.{2} (r{3})", v.Major, v.Minor, v.Build, v.Revision);
并且要澄清一下:在.net或者至少在C#中,该内部版本实际上是THIRD号,而不是某些人(例如习惯于Major.Minor.Release.Build的Delphi开发人员)所期望的第四个数字。
在.net中,它是Major.Minor.Build.Revision。
我们正在使用哪种源代码控制系统?
几乎所有文件都具有某种形式的$ Id $标签,该文件会在签入文件时扩展。
我通常使用某种形式的骇客将其显示为版本号。
另一种选择是使用日期作为内部版本号:080803-1448
不久前,我写了一个快速而肮脏的exe文件,该文件将更新Assemblyinfo中的版本号。{cs / vb}我还使用过rxfind.exe(一种简单且功能强大的基于regex的搜索替换工具)进行更新。在构建过程中从命令行访问。其他一些有用的提示:
将assemblyinfo分为产品零件(公司名称,版本等)和特定于装配的零件(装配名称等)。另请参见此处-我使用Subversion,因此我发现将内部版本号设置为Subversion修订版本号很有帮助,从而使始终返回生成程序集的代码库变得非常容易(例如1.4.100.1502是从1502版本构建的)。
VS.NET默认将Assembly版本设置为1.0。*,并在自动递增时使用以下逻辑:它将构建部分设置为自2000年1月1日以来的天数,并将修订部分设置为自午夜以来的秒数,当地时间除以2. 请参阅此MSDN文章。
程序集版本位于assemblyinfo.vb或者assemblyinfo.cs文件中。从文件:
' Version information for an assembly consists of the following four values: ' ' Major Version ' Minor Version ' Build Number ' Revision ' ' You can specify all the values or you can default the Build and Revision Numbers ' by using the '*' as shown below: ' <Assembly: AssemblyVersion("1.0.*")> <Assembly: AssemblyVersion("1.0.0.0")> <Assembly: AssemblyFileVersion("1.0.0.0")>
如果我们希望每次编译时都会更新一个自动递增的数字,则可以使用预构建事件中的VersionUpdater。如果愿意,预构建事件可以检查构建配置,以使版本号仅针对Release版本(例如)递增。