如何使安装程序的版本号与已安装的程序集的版本号保持同步?

在我目前的项目中,我正在制作每周版本。 我一直在使用这篇文章中描述的技术来保持项目中所有程序集的版本号同步。 (我现在没有任何理由单独跟踪组件的版本号,但我确信那一天最终会到来。)

当我推出一个版本时,我构建了一个新版本的安装程序。 与可以从共享的SolutionInfo.cs文件中获取其版本号的所有程序集不同,安装程序的版本号不是最好的,我可以说是程序集属性。 所以我的发布过程包括手动推进安装项目中的版本号。

或者,我应该说, 通常包括这样做。 我想把它变成我无法搞砸的东西。 我发现设置和部署项目的文档令人惊讶地不透明(如果用户将其安装到非默认路径,那么找到如何使MSI正确卸载是非常困难的,这是一个非常疯狂的常见用例,无法记录)并且不知道是否有可能这样做。

有任何想法吗?

编辑:

为了澄清,这是我正在谈论的Visual Studio设置和部署项目。

CodeProject有一个脚本来设置MSI文件的版本号,您可以在安装项目的预构建步骤中运行该脚本。 你在这里找到它:

http://www.codeproject.com/KB/install/NewSetupVersion.aspx

更多细节

请注意,使用Windows Installer时,事情会复杂一些。 MSI文件(作为使用VS安装和部署项目创建的文件)不仅具有版本号,还具有GUID值的产品代码。 Windows Installer使用此产品代码来唯一标识您的产品,例如在控制面板 – >添加或删除程序中,您可以决定卸载或修复产品。

但是,在更改MSI版本号时,还必须在许多情况下更改此产品代码。 MSI技术的文档记录很少,但您可以在以下MSDN页面上找到更改产品代码的建议: http : //msdn.microsoft.com/en-us/library/aa367850(VS.85).aspx 。

在我的项目中,我总是为每个新版本生成新的产品代码。 CodeProject上的脚本也将为您更改产品代码。

还有一件事:Windows Installer只检查版本号afaik的前三个位置,第四个位置的任何内容都将被忽略,即2.3.0.1234被认为等于2.3.0.5678。 ( ProductVersion )

(有关CodeProject的相关文章,您可能也会感兴趣: http : //www.codeproject.com/KB/install/VersionVDProj.aspx )

它将取决于您正在使用的安装程序工具包。

我们使用TFS Team Build和WiX v3 。 我有一个自定义生成任务,它增加了Team build中的内部版本号(例如5.0.0.X),然后将此版本号推送到公共AssemblyInfo.cs AssemblyFileVersion字段。 它也被MSBuild传递给我们的解决方案/项目作为属性,然后传递给WiX并用于更新安装程序版本。

我们可能还需要在某天使用程序集版本做得更好,但是现在这对我们来说非常好。

我为VS2010安装项目(.MSI + setup.exe)使用了一种解决方法。 在记事本中打开.vdproj并编辑ProductVersion分配值(下例中为3.2.1)。 保存文件并双击.vdproj文件启动VS2010。

"Product" { "Name" = "8:Microsoft Visual Studio" "ProductName" = "..." ... "ProductVersion" = "8:3.2.1" "Manufacturer" = "..." ... }