首页 > 解决方案 > 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 在编译时间之前停止更改这些变量?

标签: c++visual-studiomfcdialogc++17

解决方案


正如对原始帖子的评论中提到的,典型的方法是在 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

微软:Visual C++ 如何管理集合包含信息


推荐阅读