Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 如何在两个Visual C++;项目? 我有2个Visual C++项目,它们都有一个RC文件,其中定义了产品版本。如何使这两个项目都从全球获得此版本?全局RC文件或有什么解决方案?_Visual Studio - Fatal编程技术网

Visual studio 如何在两个Visual C++;项目? 我有2个Visual C++项目,它们都有一个RC文件,其中定义了产品版本。如何使这两个项目都从全球获得此版本?全局RC文件或有什么解决方案?

Visual studio 如何在两个Visual C++;项目? 我有2个Visual C++项目,它们都有一个RC文件,其中定义了产品版本。如何使这两个项目都从全球获得此版本?全局RC文件或有什么解决方案?,visual-studio,Visual Studio,对我来说最有效的方法是添加两个“解决方案项”。一个是.h文件,它定义了一些版本字符串,另一个是.rc文件,它包含了.h和块“StringFileInfo”,该块使用了定义 每个项目的单个资源文件都使用一个导入解决方案的.rc的内容 这是很多可以接受的。让我告诉你我的意思 1)添加两个解决方案项,如下所示: 2)version.h有一些将在VersionInfo.rc2中使用的定义 #define SOLUTIONFILEVERSION 1,00,0000,00000 #define SOLUT

对我来说最有效的方法是添加两个“解决方案项”。一个是.h文件,它定义了一些版本字符串,另一个是.rc文件,它包含了.h和
块“StringFileInfo”
,该块使用了定义

每个项目的单个资源文件都使用一个导入解决方案的.rc的内容

这是很多可以接受的。让我告诉你我的意思

1)添加两个解决方案项,如下所示:

2)
version.h
有一些将在VersionInfo.rc2中使用的定义

#define SOLUTIONFILEVERSION 1,00,0000,00000
#define SOLUTIONFILEVERSIONSTRING "1,00,0000,00000"
#define COPYRIGHT "Copyright 2012"
#define PRODUCTNAME "Your product name"
#define COMPANYNAME "Your company name"
3)VersionInfo.rc2使用定义

#include "version.h"
VS_VERSION_INFO VERSIONINFO
 FILEVERSION SOLUTIONFILEVERSION
 PRODUCTVERSION SOLUTIONFILEVERSION
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x2L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "CompanyName", COMPANYNAME
            VALUE "FileVersion", SOLUTIONFILEVERSIONSTRING
            VALUE "LegalCopyright", COPYRIGHT
            VALUE "ProductName", PRODUCTNAME
            VALUE "ProductVersion", SOLUTIONFILEVERSIONSTRING
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END
在下一步中包含资源编译器时,您需要在该文件末尾添加一行新行,以使资源编译器满意

您可能希望设置的另一个字段是“FileDescription”,但这通常是基于每个项目的。请记住,这可以包含您希望在项目之间共享的任何内容

4)在每个流程中包括VersionInfo.rc2。这是通过在资源视图中右键单击每个项目的.rc并选择Resource Includes来完成的

添加到编译时指令中:
#包括“./VersionInfo.rc2”

这可以通过向项目的.rc文件中添加以下内容来手动完成,但最好让VisualStudio为您管理一切

3 TEXTINCLUDE 
BEGIN
    "#include ""../VersionInfo.rc2""\r\n"
    "\0"
END

/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#include "../VersionInfo.rc2"
/////////////////////////////////////////////////////////////////////////////
呸……真是太好了。但现在您应该可以从一个位置更改产品版本。

好的,我已经解决了

我不得不在项目资源文件的底部添加以下内容

/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//

#include "VersionInfo.rc2"

/////////////////////////////////////////////////////////////////////////////

现在一切都很好。谢谢

创建一个全局
version.h
文件,并从两个rc文件中包含它。我想你只能手动修改版本信息。@aleguna你能举个例子说明version.h文件中需要包含什么吗?@donnib,在任何文本编辑器中打开你的rc文件(例如notepad.exe)然后将版本部分剪切粘贴到
version.h
。然后使用此方法在rc文件中包含
version.h
,非常感谢。我试过你的建议,但没用。我创建了version.h文件并进行了定义,然后创建了VersionInfo.rc2并将其包含在项目的主RC文件中。我还在项目中添加了version.h和VersionInfo.rc2。您没有提到的一件事是从主RC文件中删除版本内容。我也这么做了。在构建项目时,我会收到警告/错误,并且dll已清空所有字段,因此版本信息似乎无法通过。我不知道我到底做错了什么。我的IDE是Visual Studio 2009,您提到过在每个项目的基础上设置FileDescription。有什么建议吗?在项目特定的.rc文件中,除了此共享文件之外,是否还有另一个
块“StringFileInfo”
?我继续尝试添加第二个版本信息块,这会产生一个错误,正如我所怀疑的那样。仍在寻找包含项目特定值的方法。你们知道如何在msbuild中添加这些rc文件以在teamcity上运行吗?@Ani我从未使用过teamcity,但按照此答案中的步骤,然后将msbuild指向您的
.sln
。我很高兴它能够正常工作。我已经更新了我答案中的最后一步,希望能让以后的其他人更容易跟进。