c++ - Visual Studio C++ 资源文件在更改对话框后被更改
问题描述
我的项目中的 .rc 文件有一个奇怪的问题。
我设置了一些变量来在我的对话框中显示版本号。
BEGIN
VALUE "CompanyName", "Big company"
VALUE "FileDescription", "nice software"
VALUE "FileVersion", VERSION_NUMBER
VALUE "InternalName", "some name"
VALUE "LegalCopyright", "some more strings"
VALUE "OriginalFilename", "some.exe"
VALUE "ProductName", "some name"
VALUE "ProductVersion", VERSION_NUMBER
END
问题是,当我在 Visual Studio 中更改任何对话框时,即使只是移动一个按钮,也会更改变量。在这种情况下:VERSION_NUMBER 到“004.005.0.0”。这还不错,我的意思是在编译时它最终应该填满标题中定义的正确数据:
#define MAJOR 004
#define MINOR 005
#define RELEASE 0
#define BUILD 0
#define VERSION_NUMBER STRINGIFY(MAJOR) "." STRINGIFY(MINOR) "." STRINGIFY(RELEASE) "." STRINGIFY(BUILD)
#define VERSION_NUMBER_DWORD MAJOR,MINOR,RELEASE,BUILD
#endif
但不是在我编辑对话框时。
现在我们在构建服务器上有一个 powershell 脚本,它搜索这些字符串并在编译之前重置它们,但这不是最优雅的解决方案。有没有办法告诉 Visual Studio 在编译时间之前停止更改这些变量?
解决方案
正如对原始帖子的评论中提到的,典型的方法是在 rc2 文件中添加行。
作为替代选项,您可以使用 TEXTINCLUDE 部分添加只读定义并包含其他头文件。这些部分由编辑器在重建文件时使用。
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#ifndef APSTUDIO_INVOKED\r\n"
"#include ""targetver.h""\r\n"
"#endif\r\n"
"#include ""afxres.h""\r\n"
"#include ""verrsrc.h""\r\n"
"#define MAJOR 004\r\n"
"#define MINOR 005\r\n"
"#define RELEASE 0\r\n"
"#define BUILD 0\r\n"
"#define VERSION_NUMBER STRINGIFY(MAJOR) ""."" STRINGIFY(MINOR) ""."" STRINGIFY(RELEASE) ""."" STRINGIFY(BUILD)\r\n"
"#define VERSION_NUMBER_DWORD MAJOR,MINOR,RELEASE,BUILD\r\n"
"\0"
END