从命令行递增Delphi XE项目版本号

6
我有一个Delphi XE项目,我试图在使用MSBuild构建之前更改程序的版本号。版本号信息位于DPROJ文件中,但如果我更改这些值,则版本号不会更改。我认为原因是当您在IDE中更改版本号时,Delphi会将更改保存到DPROJ和RES文件中。
是否有一种方法可以使用DPROJ文件中的更改从命令行编译RES文件?我发现这个问题,它建议将版本号保存在INC文件中并包含在项目中,但与仅在DPROJ中进行更改相比,这感觉更加复杂。

1
就我个人而言,我有自己的预构建操作,可以生成一个 .rc 文件,然后将其转换为 .res。我根本不使用 IDE 工具,因为它们很难自动化。 - David Heffernan
1
@David 你是否有生成 .rc 文件的预构建操作示例? - Ville Salonen
2
我有一个.inc文件,我在项目中包含了它,其中包含版本信息的各个部分。这定义了市场版本而不是x.x.x.x版本。后者是从市场名称创建的。我使用一个Perl脚本读取.inc文件,然后输出.rc文件。.rc文件的格式得到了很好的文档说明。Visual Studio会给你一个模板。然后我用rc编译它。我也以这种方式生成清单,因为我想要比Delphi给我的更多控制。 - David Heffernan
5个回答

5

我最终通过这个答案解决了我的问题。首先,我在“项目选项”中取消勾选“在项目中包含版本信息”,并添加了一个带有虚假数据的VersionInformation.rc文件。当我的构建批处理文件被执行时,它会生成正确的RC文件,并且因为该RC文件已被添加到Delphi项目中,MSBuild将使用其中包含的信息来构建可执行文件。



3

我使用FinalBuilder来处理版本信息。你的Delphi中没有剥离版本吗?如果没有,那么它绝对值得购买。可以使发布变成一键操作。


这可能是一个很好的解决方案,但由于我的公司使用TeamCity构建服务器,我更喜欢为我们的项目构建MSBuild脚本。 - Ville Salonen
更正:显然,FinalBuilder脚本也可以在TeamCity中运行。 - Ville Salonen

2

是的,你说得对。Delphi在项目文件和资源文件中都保留了版本号。不过,资源文件的结构有点复杂,因此很难通过编程方式进行更新。当我遇到这个需求时,我最终使用了一个名为“SetVersion.exe”的工具,它为我完成了这项工作。它可能也可以帮助你。请参见this link

编辑

实际上,现在我记起来了,我使用了一个名为“ChangeRes.exe”的不同工具,并且它运行顺利(但它不是免费的)。你可以尝试两者并看看哪一个适合你。


2
如果您使用.rc文件创建资源,那么版本资源文件非常容易,因为.rc文件只是纯文本。在@ville的答案中已经提到了这个问题 - jachguate

-1
几年前,我用 Ruby 和 Rake 编写了一个脚本来构建和增加构建号。非常易于使用。
构建完成后,脚本调用 Inno Setup 并生成新的安装程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接