我正在尝试设置我的VisualStudio项目,以根据this page中所述的最新subversion版本号设置程序集版本。但版本号似乎总是落后于一个版本。
我已将程序集版本属性拆分为单独的文件VersionInfo.cs,该文件使用预构建事件进行更新。
我正在使用以下代码在我的表单标题中显示版本号:
System.Reflection.Assembly assem = System.Reflection.Assembly.GetExecutingAssembly();
this.Text = "My Program Version: " + assem.GetName().Version.ToString();
以下是对正在发生的事情的了解。
我提交了我的项目,以便它是最新版本。
使用TortiseSVN我使用show log查看我在修订版55
我构建了我的解决方案。
然后我打开VersionInfo.cs并看到预构建事件正确覆盖了此文件
[assembly:System.Reflection.AssemblyVersion(“0.1.55。*”)]
然而,当我运行程序时,标题栏显示为旧版本0.1.52.20486
接下来,我在记事本中打开项目文件,然后更改内容,例如添加空行,然后保存文件。
VisualStudio显示项目文件已更改的通知,并提示我重新加载我接受的项目
现在,当我构建并运行该程序时,表单显示版本为0.1.55.20645
我对项目中的内容进行了更改,并提交给SubVersion。
TortiseSVN确认我的工作副本现在是修订版56.
我构建了我的项目,并且VersionInfo.cs已正确更新为
[assembly:System.Reflection.AssemblyVersion(“0.1.56。*”)]
我再次尝试运行该应用程序,表单标题显示0.1.55.20750而不是0.1.56.xxxxxx
另外我注意到即使我重建/重新运行我的应用程序,内部版本号(版本号中的最后一个数字)也没有更新。据我所知,星号将在每次构建时替换为我的新号码。
任何人都知道发生了什么事吗?
答案 0 :(得分:1)
我没有使用您正在使用的特定工具,但我使用的工具要求您在提交后对沙箱进行更新。与使用上次更新检索的修订号而不是最后一次提交的工具有关。
答案 1 :(得分:0)
签入文件时,修订号会按您所知的方式递增。问题是,您在签入时不知道该修订号是什么 - 您只能在签入后找到。
因此,如果您使用最新的修订号,建立您的项目,然后签入 - 使用的号码将始终过时。您真正想要的是能够签入,然后获得您刚刚执行的提交的轮次,然后然后使用正确的版本号构建您的项目。
显然这是不可能的。
有一种解决方法 - 使用CI系统在签入后立即构建项目(通过提交后挂钩)。这些将检查您刚刚添加的最新版本,更新您的version.cs文件,然后构建。缺点是你的version.cs文件永远不会包含正确的版本号(除非CI系统再次检查它)
答案 2 :(得分:0)
处理此问题的最佳方法是进行构建。
我使用Jenkins作为我的持续构建服务器,而不是依赖于在我的系统上进行手动构建。如果您不使用Jenkins(Hudson,Atlassian Bamboo和CruiseControl等三种其他流行的Continuous Build服务器),您应该这样做。这样,您的官方版本不依赖于特定的开发人员计算机。
如果您使用Jenkins,现在可以使用Nant甚至Ant来帮助您操作构建。我们现在正在和Jenkins和Ant一起做这件事。
我所做的是使用msbuild.exe
使用Jenkins构建我的项目。在我进行构建之前,我使用Ant来检索Subversion版本号(实际上,我们使用Jenkin的构建号,但理论是相同的)来修改具有正确版本的汇编文件。然后,我自己做一个构建。在构建文件时,结果是正确的Subversion版本号(在我们的例子中是错误的Jenkins构建号)。
想想看,你可以做你现在正在做的事情来在Assembly文件中设置Revision。然后Jenkins将在汇编文件中使用正确的版本号构建项目。您下载构建的软件包,您将在标题栏中看到正确的版本号。