2012-10-10 10 views
8

要約:プリプロセッサマクロを使用してversion.incを別途更新してバージョン情報を定義しています...マクロ値を含める方法リソースバージョン定義ブロックに追加しますか?VC++ 2012:.rcファイルにversion.inc(別途管理)のバージョン情報を含める方法

私のversion.inc私のversion.incファイルは、UTF-8で格納されています(例:純粋なASCII)。

#define APS_MAJORNUMBER   4 
#define APS_MINORNUMBER   5 
#define APS_BUILDNUMBER   0 
#define APS_MODIFICATIONNUMBER 0 
#define APS_BUILDEXT    "wx" 
#define APS_DATEYEAR   2012 
#define APS_DATEMONTH   10 
#define APS_DATEDAY    4 

のVisual Studio 2012 C++をもっとうるさいのようだ:その完全な内容は、以下の(ここではないリソースコンパイラによって生成された.apsファイルには、アプリケーションの実際の名前に関係しているAPS_接頭辞)ですVisual Studio 2010よりもリソーススクリプトファイル(app.rc)について。私が気づいた最初のことは、手動で編集するときに、UTF-16エンコーディングを維持する必要があるということです。それを確認できますか?それに関する文書はありますか? Visual Studio(2005および2010)の以前のバージョンでは

///////////////////////////////////////////////////////////////////////////// 
// 
// Version 
// 

VS_VERSION_INFO VERSIONINFO 
FILEVERSION 1,0,0,1 
PRODUCTVERSION 1,0,0,1 
FILEFLAGSMASK 0x3fL 
#ifdef _DEBUG 
FILEFLAGS 0x1L 
#else 
FILEFLAGS 0x0L 
#endif 
FILEOS 0x40004L 
FILETYPE 0x1L 
FILESUBTYPE 0x0L 
BEGIN 
    BLOCK "StringFileInfo" 
    BEGIN 
     BLOCK "040504b0" 
     BEGIN 
      VALUE "CompanyName", "TODO: <Company name>" 
      VALUE "FileDescription", "TODO: <File description>" 
      VALUE "FileVersion", "1.0.0.1" 
      VALUE "InternalName", "app.exe" 
      VALUE "LegalCopyright", "Copyright (C) 2012" 
      VALUE "OriginalFilename", "app.exe" 
      VALUE "ProductName", "TODO: <Product name>" 
      VALUE "ProductVersion", "1.0.0.1" 
     END 
    END 
    BLOCK "VarFileInfo" 
    BEGIN 
     VALUE "Translation", 0x405, 1200 
    END 
END 

、私はこのような関連version.rc2を持つことができました:

app.rcでバージョンブロックは次のようになります言う

///////////////////////////////////////////////////////////////////////////// 
// 
// Version 
// 

#include "version.inc" 

#define STR(value) #value 
#define STRINGIZE(value) STR(value) 
#define APS_FULLVERSION_STR \ 
    STRINGIZE(APS_MAJORNUMBER) "." \ 
    STRINGIZE(APS_MINORNUMBER) "." \ 
    STRINGIZE(APS_BUILDNUMBER) "." \ 
    STRINGIZE(APS_MODIFICATIONNUMBER) 


VS_VERSION_INFO VERSIONINFO 
FILEVERSION APS_MAJORNUMBER,APS_MINORNUMBER,APS_BUILDNUMBER,APS_MODIFICATIONNUMBER 
PRODUCTVERSION APS_MAJORNUMBER,APS_MINORNUMBER,APS_BUILDNUMBER,APS_MODIFICATIONNUMBER 
FILEFLAGSMASK 0x3fL 
#ifdef _DEBUG 
FILEFLAGS 0x29L 
#else 
FILEFLAGS 0x28L 
#endif 
FILEOS 0x4L 
FILETYPE 0x1L 
FILESUBTYPE 0x0L 
BEGIN 
    BLOCK "StringFileInfo" 
    BEGIN 
     BLOCK "000004b0" 
     BEGIN 
      VALUE "Comments", "A fairly useful tool named APS" 
      VALUE "CompanyName", "The company name" 
      VALUE "FileDescription", "app" 
      VALUE "FileVersion", APS_FULLVERSION_STR 
      VALUE "InternalName", "aps" 
      VALUE "LegalCopyright", "Copyright © 1993-" STRINGIZE(APS_DATEYEAR) 
      VALUE "OriginalFilename", "app.exe" 
      VALUE "PrivateBuild", "" 
      VALUE "ProductName", "APS of the version 4" 
      VALUE "ProductVersion", APS_FULLVERSION_STR 
      VALUE "SpecialBuild", APS_BUILDEXT 
     END 
    END 
    BLOCK "VarFileInfo" 
    BEGIN 
     VALUE "Translation", 0x0, 1200 
    END 
END 

version.rc2app.rcを手作業で編集してapp.rcに含まれていました。ただし、Visual Studio 2012プロジェクトとリソースファイルを使用してプロセスを繰り返すことはできません。私は目に見えないミスをしているかもしれません。そのアプローチはVisual Studio 2012でも動作するはずですか?ここでは時間と経験のため

おかげで、

ペトル

答えて

12

は、Visual Studio 2012(C++、IDE)を介してそれを行う方法です。第一に、すべてのファイル(バージョン部とapp.rcversion.rc2が別々に維持さ値をapp.rcともversion.incに[version.rc2に含める]に含まれること)と思わUTF-16に格納されなければなりません - 以前のバージョンのVisual Studioとは異なります。 Visual Studio 2012でも同じ方法を繰り返しました。

ただし、app.rcファイルを手動で編集する必要はありません。プロジェクトを開く(App

  • リソースビュータブに切り替え:あなたは、IDEを使用して、次の手順を使用することができます。
  • Appプロジェクトを展開し、app.rcを展開してVersionフォルダを展開します。 VS_VERSION_INFOアイテムが表示されます。
  • VS_VERSION_INFOの項目にマークを付け、キーボードのDeleteキーを押します。アイテムとその上部のVersionフォルダが消えます。
  • app.rcフォルダを右クリックし、リソースが含まれている...を選択します。同じ名前のダイアログと3つの入力ペインが表示されます。

Resourde Includes dialog

  • コンパイル時ディレクティブという名前の下のペインにフォーカス:を、そしてそこ#include "version.rc2"を書きます。 (ファイルが.rc拡張子を持っていなければなりませんが、.rc2は罰金とMSDNドキュメントの別の場所でお勧めです。)
  • 押しOK、および(も修正app.rcを保存する)すべてのファイルを保存します。

ステップの結果は、(リソースビュータブを参照)を使用すると、リソースツリーでVersionフォルダとVS_VERSION_INFO項目が表示されないということです。しかしながら、上記で構築されたVersionセクション(version.rc2の内部に格納されている)は、アプリケーションリソースにコンパイルされる。

技術的には、app.rcファイルの以下の部分は、手順の後に見つけることができます:

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

...

#ifndef APSTUDIO_INVOKED 
///////////////////////////////////////////////////////////////////////////// 
// 
// Generated from the TEXTINCLUDE 3 resource. 
// 
#include "version.rc2" 

///////////////////////////////////////////////////////////////////////////// 
#endif // not APSTUDIO_INVOKED 

トピックを強化するために、任意の建設的なコメントは歓迎されていると+になります1-ed :)

楽しい時間を過ごす、

Petr

+1

最も重要な点は、リソースファイルとヘッダーがUTF-16でなければならないことです。これは、新しいRCコンパイラに対する非常識な制限で、私のバグのようです。 – philk

+0

ありがとうございます。それ、変だよ。あなたはちょっと私を救っただけです。 –

+0

ようこそ。好奇心をそそるだけで、Visual Studio 2012または新しいVS2013(候補者VS2014)で試しましたか? – pepr

関連する問題