2012-11-28 60 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

我很高興你能工作。我已經更新了答案中的最後一步,希望能夠讓其他人隨時關注。 –

相關問題