有问题自动将我的程序集版本同步到我的SubVersion修订版

时间:2009-10-07 19:48:31

标签: visual-studio svn

我正在尝试设置我的VisualStudio项目,以根据this page中所述的最新subversion版本号设置程序集版本。但版本号似乎总是落后于一个版本。

我已将程序集版本属性拆分为单独的文件VersionInfo.cs,该文件使用预构建事件进行更新。

我正在使用以下代码在我的表单标题中显示版本号:

System.Reflection.Assembly assem = System.Reflection.Assembly.GetExecutingAssembly();
this.Text = "My Program Version: " + assem.GetName().Version.ToString();

以下是对正在发生的事情的了解。

  1. 我提交了我的项目,以便它是最新版本。

  2. 使用TortiseSVN我使用show log查看我在修订版55

  3. 我构建了我的解决方案。

  4. 然后我打开VersionInfo.cs并看到预构建事件正确覆盖了此文件

    [assembly:System.Reflection.AssemblyVersion(“0.1.55。*”)]

  5. 然而,当我运行程序时,标题栏显示为旧版本0.1.52.20486

  6. 接下来,我在记事本中打开项目文件,然后更改内容,例如添加空行,然后保存文件。

  7. VisualStudio显示项目文件已更改的通知,并提示我重新加载我接受的项目

  8. 现在,当我构建并运行该程序时,表单显示版本为0.1.55.20645

  9. 我对项目中的内容进行了更改,并提交给SubVersion。

  10. TortiseSVN确认我的工作副本现在是修订版56.

  11. 我构建了我的项目,并且VersionInfo.cs已正确更新为

    [assembly:System.Reflection.AssemblyVersion(“0.1.56。*”)]

  12. 我再次尝试运行该应用程序,表单标题显示0.1.55.20750而不是0.1.56.xxxxxx

  13. 另外我注意到即使我重建/重新运行我的应用程序,内部版本号(版本号中的最后一个数字)也没有更新。据我所知,星号将在每次构建时替换为我的新号码。

    任何人都知道发生了什么事吗?

3 个答案:

答案 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将在汇编文件中使用正确的版本号构建项目。您下载构建的软件包,您将在标题栏中看到正确的版本号。