例如,在项目中创建一个名为“filever.rc2”的文件。
filever.rc2 应该如下所示:
#include "version.h"
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_FILE_VERSION
PRODUCTVERSION VER_PRODUCT_VERSION
FILEFLAGSMASK 0x3fL
FILEFLAGS VER_FILEFLAGS
FILEOS VER_FILEOS
FILETYPE VER_FILETYPE
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", VER_COMPANY_STR "\0"
VALUE "FileDescription", "Your Application"
VALUE "FileVersion", VER_FILE_VERSION_STR "\0"
VALUE "InternalName", "Your"
VALUE "LegalCopyright", VER_COPYRIGHT_STR "\0"
VALUE "LegalTrademarks", VER_TRADEMARK_STR "\0"
VALUE "OriginalFilename", "Your.exe"
VALUE "ProductName", "Your Application"
VALUE "ProductVersion", VER_PRODUCT_VERSION_STR "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
“filever.rc2”中的信息是从项目现有的自动生成的 .rc 文件中复制并粘贴的。然后将其修改为使用定义的标识符。 #include "version.h" 将是定义的来源。该文件可以是您的应用程序的一部分,您可以在其中从 Visual Studio 修改版本信息。
在文件“version.h”中,添加以下内容:
#define VERSION_YEAR 16 // 2 digit year
#define VERSION_MONTH 4 // 2 digit month
#define VERSION_DAY 22 // 2 digit day
#define VERSION_UNSAFE 0 // 0 = TESTED, 1 = UNSAFE / IN DEVELOPMENT
#define VER_COPYRIGHT_STR "Copyright (C) 1999 - 2016"
#define VER_TRADEMARK_STR "Your Trademark"
#define VER_COMPANY_STR "Your Company"
#define STRINGIZE2(s) #s
#define STRINGIZE(s) STRINGIZE2(s)
#if (VERSION_UNSAFE == 1)
#define MY_VERSION_NUM STRINGIZE(VERSION_YEAR) STRINGIZE(VERSION_MONTH) "." STRINGIZE(VERSION_DAY) STRINGIZE(VERSION_UNSAFE)
#else
#define MY_VERSION_NUM STRINGIZE(VERSION_YEAR) STRINGIZE(VERSION_MONTH) "." STRINGIZE(VERSION_DAY)
#endif
#define VER_FILE_VERSION VERSION_YEAR, VERSION_MONTH, VERSION_DAY, VERSION_UNSAFE
#define VER_FILE_VERSION_STR STRINGIZE(VERSION_YEAR) "." STRINGIZE(VERSION_MONTH) "." STRINGIZE(VERSION_DAY) "." STRINGIZE(VERSION_UNSAFE)
#define VER_PRODUCT_VERSION VER_FILE_VERSION
#define VER_PRODUCT_VERSION_STR VER_FILE_VERSION_STR
#ifdef _DEBUG
#define VER_VER_DEBUG VS_FF_DEBUG
#else
#define VER_VER_DEBUG 0
#endif
#define VER_FILEOS VOS_NT_WINDOWS32
#define VER_FILEFLAGS VER_VER_DEBUG
#define VER_FILETYPE VFT_APP
现在,转到资源浏览器,然后右键单击您正在处理的项目的资源文件夹。单击“资源包括”。
Add:
#include "filever.rc2"
到“只读符号指令”下的包含列表。
这会将 filever.rc2 文件包含到资源文件中。单击“确定”。进行更改时将会出现警告。点击“确定”继续进行更改。
现在,浏览到资源文件中的“Version”文件夹。
打开该文件夹,右键单击版本条目,然后选择删除以删除版本条目。如果不删除,将会出现重复的资源,因为我们在 filever.rc2 文件中添加了相同的信息,我们正在包含该文件。
版本信息现在将使用 filever.rc2 中包含的版本。这样,它就不会自动生成,如果它位于项目资源文件中,就会出现这种情况。
从那时起,当您更改 version.h 中的常量并构建时,嵌入到可执行文件中的版本信息将来自 version.h 文件。
该解决方案是之前帖子中描述的示例。希望这能澄清如何实施所建议的内容。
我不确定 filever.rc2 文件上的“.rc2”扩展名是否有什么神奇之处,但我通过实验发现,如果您将其称为 .rc,它就会出现在资源浏览器中,而这并不是真正理想的情况。如果您将其命名为 .h,则它在 Visual Studio 中的编辑效果不佳,因为它会尝试对其进行智能感知,并且大多数情况下看起来像错误。将其命名为 .rc2 似乎让每个人都高兴并且不会产生副作用。
Cheers.