使用编程方式在带有SVN修订号的MFC应用程序中更新FILEVERSION

7
我该如何以编程方式更新MFC应用程序中的FILEVERSION字符串?我有一个构建过程,用于生成包含给定版本的SVN rev的头文件。我正在使用来自http://www.compuphase.com/svnrev.htm的SvnRev来更新一个头文件,该头文件用于设置我的MFC应用程序的标题栏。现在我想要使用这个#define来更新我的FILEVERION信息。
最佳操作方法是什么?
5个回答

14

.rc文件可以像.c文件一样#include头文件。我有一个自动生成的version.h文件,其中定义了如下内容:

#define MY_PRODUCT_VERSION    "0.47"
#define MY_PRODUCT_VERSION_NUM 0,47,0,0

然后我只需将我的.rc文件中的#include "version.h"进行引用并使用这些定义。

VS_VERSION_INFO VERSIONINFO
 FILEVERSION MY_PRODUCT_VERSION_NUM
 PRODUCTVERSION MY_PRODUCT_VERSION_NUM
...
 VALUE "FileVersion", MY_PRODUCT_VERSION "\0"
 VALUE "ProductVersion", MY_PRODUCT_VERSION "\0"
...

我尚未在MFC项目中尝试过这种技术。可能需要将您的VS_VERSION_INFO资源移动到您的.rc2文件(该文件不会被Visual Studio编辑)。


3

您的积分不足,无法发表评论。但不管您选择哪种解决方案,请记住FILEVERSION字段只支持短整型数据。在我们的情况下,我们的SVN版本已经超过了短整型范围,导致FILEVERSION中的版本号无效。


好点,也许你应该将revnum拆分为千位和个位;或者使用版本块中的其他字段之一将revnum存储为字符串。 - gbjbaanb

1

在你的 application.rc 文件中有一个版本块。该块控制了文件系统中显示的版本信息。

VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1

你可以通过编程方式更新此文件。确保以二进制形式打开和保存文件。我们曾经遇到过使用文本编辑器进行编辑导致文件损坏的问题。


0

0

修改VS_VERSION_INFO只会在资源管理器中右键单击文件并查看属性时反映出来。

如果您想在标题栏中显示当前的SVN修订号,我建议:

  • 编写一个脚本获取版本号,并生成仅含有它的version.h文件
#define SVN_VERSION_NO  xxx
  • 您的项目包括此version.h文件,并使用该数字显示在标题中。

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