2012-11-28 7 views
7

私は2つのVisual C++プロジェクトを持っていますが、どちらもフィールド製品バージョンが定義されているRCファイルを持っています。両方のプロジェクトをグローバルな場所から取得するにはどうすればよいですか?グローバルRCファイルか、そこにはどのような解決策がありますか?2つのVisual C++プロジェクト間で同じ製品バージョンを共有するにはどうすればよいですか?

+0

グローバルな 'バージョンを作成します。h 'ファイルと両方のrcファイルからそれを含める –

+0

私はあなたがバージョン情報を手動で変更できると思います。 – Healer

+0

@aleguna version.hファイルに必要なものを例として挙げることができますか? – dbrasco

答えて

9

私にとってうまくいくのは、2つの「ソリューションアイテム」を追加することです。 1つは.hファイルで、#definesの一部のバージョン文字列です。もう1つは、.hファイルへのインクルードを持つ.rcファイルで、その定義を使用するBLOCK "StringFileInfo"です。

各プロジェクトの個別リソースファイルには、ソリューションの.rcの内容を取り込むためにTEXTINCLUDEを使用します。 。

に取ることがたくさんある私は、私が何を意味するかをお見せしましょう...

1) 2つのソリューション項目はそれほどとして追加されます。

Solution Items

2 )version.hには、VersionInfo.rc2で使用されるいくつかの#defineがあります。

#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" 
///////////////////////////////////////////////////////////////////////////// 

雌犬...それは一口でした。しかし、今では、製品のバージョンを1つの場所から変更できるはずです。

+0

ありがとうございます。私はあなたの提案を試みたが、うまくいかない。私はversion.hファイルを作成し、それを定義した後、VersionInfo.rc2を作成し、それをプロジェクトのメインRCファイルに含めました。また、プロジェクトにversion.hとVersionInfo.rc2の両方を追加しました。あなたが言及していないことの1つは、メインのRCファイルからバージョンのものを削除することです。私もそれをしました。プロジェクトをビルドするときに警告/エラーが表示され、dllにはすべてのフィールドが空になっているので、バージョン情報が表示されないようです。私は何が間違っているのか正確には分かりません。私のIDEはVisual Studio 2009 – dbrasco

+0

です。プロジェクトごとにFileDescriptionを設定しています。それを行うための任意の提案?この共有ファイルに加えて、プロジェクト固有の.rcファイルに別の 'BLOCK" StringFileInfo "'が存在することはありますか? – CoderDennis

+0

私は先に進み、2番目のバージョン情報ブロックを追加しようとしました。プロジェクト固有の値を含める方法を探しています。 – CoderDennis

0

私はそれを解決しました。

私は今、すべてが素晴らしい作品、プロジェクトのrecourceファイルの一番下

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

#include "VersionInfo.rc2" 

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

でも同様に以下を追加する必要がありました。ありがとう

+0

あなたはそれが働いてうれしいです。私は将来的に誰かのためにそれをより簡単にするために私の答えの最後のステップを更新しました。 –

関連する問題