6

我们有一个带有 WiX 安装程序和 MSBuild 构建脚本的 C# 解决方案。我们正在从 SVN 迁移到 Git。

作为我们版本号的第四部分,我们想要随着每次构建而提升的东西。到目前为止,我们一直使用 SVN 版本号。MSBuild 脚本定义了一个 ProductVersion 属性,其中包含 SVN 修订号作为构建版本的四个数字的最后一个。但是,我们不能再使用它了,因为我们将不再使用 SVN。

我一直在尝试寻找 SVN 修订号的替代品,但我不知道该使用什么。

  • Jenkins 提供了一个我可以使用的内部版本号,但我不想将我们的版本控制系统绑定到 Jenkins。

  • Jenkins 也提供了时间戳,但不符合微软的版本号限制:它是字母数字的,有点长,而版本中的第 4 个数字应该是 0 到 65535 之间的整数。

  • 我们可以将 AssemblyVersion 设置为 1.0.* 并让 .NET 填充其余部分。这适用于我们的程序集,但我找不到将其注入 WiX 的方法。一旦构建完成,我们就可以从其中一个程序集中获取它,但是我们的 MSBuild 脚本使用该<MSBuild>任务来立即构建整个解决方案,因此我们被困在需要运行的 Catch-22 中,<MSBuild>以便它可以编译一个程序集我们可以使用来获取生成的版本号,但是为了运行<MSBuild>,我们首先需要有一个编译好的程序集,以便我们可以从中获取生成的版本号。

  • 我可以在 MSBuild 文件中添加一个单独的目标来编译某些东西(任何东西)并从中获取版本号,然后对<MSBuild>任务进行实际调用。但这只是感觉不对。

同样,我真的不在乎这个数字是多少,只要它随着每次构建而增加。基于时间戳的东西会很好。有任何想法吗?

4

3 回答 3

7

MSbuild Community Tasks包含一个名为Version的任务,它提供了一些算法来生成版本号。它非常易于使用和定制。

恕我直言,最好使用一个与您的整个 SDLC 相关联的数字,这样您就可以将部署的产品跟踪到构建结果,并将这些跟踪到 VCS,等等。我会推荐使用 jenkins 内部版本号,就像 Christopher Painter 所做的那样。

于 2013-01-16T00:45:15.427 回答
1

您可以使用!(bind.FileVersion.FileId)其中FileId一个 wxs 文件中定义的 File 元素的 ID 从程序集中获取版本号。

然后让 .NET 生成程序集编号,WiX 将使用它作为 ProductVersion。

于 2013-01-15T18:16:44.317 回答
1

你为什么不把它和詹金斯联系起来?似乎您希望 Jenkins 管理传递到构建中的属性,包括版本号。这就是我使用 BuildForge、TFS 等人所做的。

于 2013-01-15T23:14:50.113 回答