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

时间:2009-01-07 22:05:07

标签: c# visual-studio deployment

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

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

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

有什么想法吗?

修改

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

3 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:3)

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

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

我们可能还需要在某天的装配版本中做得更好,但是现在这对我们来说非常好。

答案 2 :(得分:-1)

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

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