【问题标题】:How to keep the installer's version number in sync with the installed assemblies' version numbers?如何使安装程序的版本号与已安装程序集的版本号保持同步?
【发布时间】:2010-09-30 03:46:02
【问题描述】:

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

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

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

有什么想法吗?

编辑:

澄清一下,这是我所说的 Visual Studio 设置和部署项目。

【问题讨论】:

    标签: c# visual-studio deployment


    【解决方案1】:

    这将取决于您使用的安装工具包。

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

    也许有一天我们也需要在程序集版本控制方面做得更好,但现在这对我们来说效果很好。

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

      • 我没有想到问题可能只是归结为以编程方式更新项目文件。这会起作用(尽管我肯定不会使用正则表达式来修改 XML)。并感谢关于产品代码的提醒:VS提醒你这样做,但我会忘记。
      【解决方案3】:

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

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

      【讨论】:

      • 与仅在设置项目属性窗口中设置版本属性相比,这有什么优势?你不是只是在编辑设置项目文件吗?
      猜你喜欢
      • 1970-01-01
      • 2017-08-30
      • 2017-09-25
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 2014-06-03
      相关资源
      最近更新 更多