2012-11-28 55 views
7

我有2个Visual C++项目,它们都有一个定义了字段产品版本的RC文件。我怎样才能让这两个项目从全球的地方获得这个版本?全球RC文件或有哪些解决方案?如何在两个Visual C++项目之间共享相同的产品版本?

+0

创建一个全球'版本。h'文件并从两个rc文件中包含它 – 2012-11-28 15:04:30

+0

我认为你只能手动修改版本信息。 – Healer

+0

@aleguna你可以举一个例子,在version.h文件中需要什么? – dbrasco

回答

9

对我而言,最好的办法是添加两个“解决方案项目”。一个是.h文件,其中一个版本字符串是#defines,另一个是.rc文件,该文件包含使用定义的.h和BLOCK "StringFileInfo"

每个项目的单个资源文件使用TEXTINCLUDE来引入解决方案的.rc的内容。 。

这是一个很大采取让我告诉你我是什么意思?

1)两个解决方案项目被添加像这样:

Solution Items

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

#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并选择资源包括来完成。

添加到编译时指令#include "../VersionInfo.rc2"

Compile-time directives

这可以通过添加以下到项目的rc文件手动完成,但它可能是更好的让Visual Studio的管理一切它可以为你。

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

///////////////////////////////////////////////////////////////////////////// 
// 
// Generated from the TEXTINCLUDE 3 resource. 
// 
#include "../VersionInfo.rc2" 
///////////////////////////////////////////////////////////////////////////// 

呃......那是一口。但是现在你应该能够从一个地方改变你的产品版本。

+0

非常感谢。我尝试了你的建议,但它不起作用。我创建了version.h文件并创建了定义,然后我创建了VersionInfo.rc2并将其包含在项目的主RC文件中。我还在项目中添加了version.h和VersionInfo.rc2。你没有提到的一件事是从主RC文件中删除版本的东西。我也这么做了。当建立项目我得到警告/错误,并且DLL已经清空所有字段,所以它看起来像版本信息不通过。我不知道我做错了什么。我的IDE是Visual Studio 2009 – dbrasco

+0

您提到了在每个项目的基础上设置FileDescription。有什么建议吗?除了这个共享的文件之外,还可以在项目特定的.rc文件中有另一个'BLOCK“StringFileInfo”? – CoderDennis

+0

我继续尝试添加第二个版本信息块,并产生一个错误,因为我怀疑它会。仍在寻找一种包含项目特定值的方式。 – CoderDennis

0

好吧,我已经解决了。

我不得不在项目的林资源文件的底部

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

#include "VersionInfo.rc2" 

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

现在一切都很正常添加以下为好。谢谢

+0

我很高兴你能工作。我已经更新了答案中的最后一步,希望能够让其他人随时关注。 –

相关问题