私はexeまたはdllファイルをビルドするC++プロジェクトをいくつか持っています。プロジェクトはSVNリポジトリにチェックインされます。自動的にSVNからのリビジョンと、exe/dllファイルに埋め込まれたバージョンリソースとを同期させたい、つまりバージョンは$ major。$ minor。$ svn_revisionのようにする必要があります。
これを達成するためのアイデアはありますか?すぐに使えるソリューションはありますか?EXE/DLLファイルのSVNリビジョンとバージョンressourcesを同期させるには?
答えて
TortoiseSVNがインストールされている場合、インストールされているプログラムはSubWCRev
です。
、あなたのファイルで、この値がある場合:
SubWCRev .\ yourfile.txt.template yourfile.txt
この意志:
$WCREV$
をあなたはこのような何かを実行する場合、それは最高のコミットリビジョン番号に置き換えられますyourfile.txt.template
からコピーし、置換を行い、yourfile.txt
に書き込みます。
他にも多くのマクロがありますが、引数なしでSubWCRev
を実行すると、それらはすべてコンソールに一覧表示されます。
Subversion PropertiesとSubversion Keywordsを調べるとよいでしょう。リソースの問題を解決することはありません。なぜなら、彼らはいつもその気持ちを含むからです。$KeywordName: ...$
部分です。カスタムプロパティは、メタデータをバッチファイルで利用できるようにするための素晴らしい方法を提供します。
とにかく、私は数年前にリソース問題の解決策を探していましたが、それを見つけられませんでした。そこで、私たちは独自の自社開発のソリューションを作成しました。ビルドプロセス中に生成されたヘッダーファイルを含めるようにRCファイルを変更しました。 RCはヘッダーに依存し、ヘッダーにはヘッダーを生成するためのバッチファイルを呼び出すカスタムビルドルールがありました。次のスニペットは、出力から現在のリビジョンを抽出します。svn info
。
SET rootdir=%1
SET svnrev=0
PUSHD "%rootdir%"
FOR /F "tokens=1-4 delims=: " %%I IN ('svn info') DO (
IF /I {%%I}=={rev} SET svnrev=%%L
)
(ECHO./*
ECHO. * version-stamp.h - repository version information
ECHO. */
ECHO.#ifndef VERSION_STAMP_H
ECHO.#define VERSION_STAMP_H
ECHO.#define REPOSITORY_VERSION %svnrev%
ECHO.#endif) > include\version-stamp.h
POPD
はその後、我々は次のように見えたcomponent-info.h
という名前のコンポーネントの特定のバージョンスタンプヘッダーを作成しました:
#ifndef component_info_h
#define component_info_h
#include "product-info.h"
#include "version-stamp.h"
#define VERS_MAJOR 1
#define VERS_MINOR 2
#define VERS_PATCH 3
#define VERS_BUILD REPOSITORY_VERSION
#define MY_COMPONENT_NAME "TPS Report Generator"
#define MY_VERSION_NUMBER VERS_MAJOR,VERS_MINOR,VERS_PATCH,VERS_BUILD
#define MY_VERSION_STRING VERSION_STRING(VERS_MAJOR,VERS_MINOR,VERS_PATCH,VERS_BUILD)
#endif
は最後に、我々はproduct-info.h
という名前の製品情報を定義し、製品ラインバージョンのファイルを持っていた:
#ifndef product_info_h
#define product_info_h
#define PROD_VERS_MAJOR 0
#define PROD_VERS_MINOR 1
#define PROD_VERS_PATCH 0
#define PROD_VERS_BUILD 0
#define VSTR1(s) #s
#define VSTR(s) VSTR1(s)
#define VERSION_STRING(a,b,c,d) VSTR(a) "." VSTR(b) "." VSTR(c) "." VSTR(d) "\0"
#define MY_COMPANY_NAME "IniTech\0"
#define MY_COPYRIGHT "Copyright ©2009 " MY_COMPANY_NAME
#define MY_PRODUCT_NAME "\0"
#define MY_PRODUCT_VERSION_NUM PROD_VERS_MAJOR,PROD_VERS_MINOR,PROD_VERS_PATCH,PROD_VERS_BUILD
#define MY_PRODUCT_VERSION_STR VERSION_STRING(PROD_VERS_MAJOR,PROD_VERS_MINOR,PROD_VERS_PATCH,PROD_VERS_BUILD)
#endif
リソースファイルにはcomponent-info.h
が含まれ、適切なplでさまざまな定義が使用されますエース(例えば、FILEVERSION MY_VERSION_NUMBER
)。この構造により、バージョンスタンピングプロセス全体で多くの柔軟性とトレーサビリティが得られました。それはバッチファイルの単純な塊からこの多レベルの怪物に成長しましたが、ここ数年は私たちのために非常にうまくいっています。
誰もまだこれを行うより良い方法を見つけていないとは思えません。それから、私は何年もそれを調べていません。私はあなたがこれを処理するカスタムツールを定義するカスタム.rules
ファイルを追加できると思います。
これは大きな助けになりました。ありがとうございます。 Visual Studio 2008のためにこれを洗練しました。
1 /作成した/各プロジェクト内のフォルダを作成し
/AssemblyInfo.cs.txtとしてビルドフォルダにAssemblyInfo.csをコピーし、ビルドアクションを設定する2に "なし"
3 /編集バージョンを持っているAssemblyInfo.cs.txtは、以下のように属性:
[assembly: AssemblyVersion("2.0.0.$WCREV$")]
[assembly: AssemblyFileVersion("2.0.0.$WCREV$")]
4 /追加事前に作成イベントに次
SubWCRev $(SolutionDir) $(ProjectDir)\Build\AssemblyInfo.cs.txt $(ProjectDir)\Properties\AssemblyInfo.cs
これはコンパイルするたびに機能します。
私はUPDATEのVisual Studio 2008
でVisualSVN/TortoiseSVNのとVisualSVN Serverを使用しています:
私の同僚は、ちょうど彼の作業コピーを更新したとAssemblyInfo.csが競合です。明らかだ。私はこれを解決するためにVisualSVNを使用してSVNから除外しました。
Program.Xの回答は素晴らしいです。しかし、変更をコミットする前に実行可能ファイルをビルドすると、実行中のコードの実際のリビジョン番号より1つ少ないリビジョンになることを、私は付け加えたいと思います。これを緩和するために、あなたがいない場合はローカル変更がある場合は最後に1を入れて、0になる
"2.0.$WCREV$.$WCMODS?1:0$"
にバージョンを設定することができます。したがって、後で実行可能ファイルを見て2.0.54.1を見ると、おそらく実際にはリビジョン55となることがわかります。
WCREVで利用可能なキーワードに関する詳細はこちら:http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev-keywords.html –
良い点。私は気付いていましたが、これにフラグを立てるための良い回避策のように見えます。 –
バージョンが本当にSVNコンテンツの1:1ビルドか変更されたビルドであるかどうかを確認できるので、私はこれが好きです。 – Stiefel
- 1. svnのファイルの同期バージョン
- 2. SVNリビジョン番号をASP.NET Webサイトとどのように同期させるのですか?
- 3. git-svn branch - ブランチをトランクと同期させるには?
- 4. svnとcvsを同期するには?
- 5. SmartSVNとSVNバージョンの混同
- 6. SVNを使ってコードを同期させるには?
- 7. SVNとリビジョン番号
- 8. SVN戻るリビジョン
- 9. SVNとVSSの同期
- 10. svn:ファイルがリビジョンAから古いリビジョンBに変更されましたか?
- 11. トルティーオスSVNリビジョン
- 12. SVNリビジョン番号
- 13. SVNリビジョン番号
- 14. SVNリビジョン番号とタイムスタンプ
- 15. 現在のsvnリビジョン番号でappengine-web.xmlのバージョンを更新
- 16. Microsoft OfficeのSVNリビジョン
- 17. JMX BeanのSVNリビジョン
- 18. Tortoise SVN - リビジョンのステップスルー
- 19. SVN Eclipse IDE 3.5.0と同期
- 20. Svnレポ同期
- 21. Jewelerのgemバージョンとプログラムのバージョン文字列を同期させる
- 22. SVNリビジョンから別のブランチに1つのファイルをマージする
- 23. svn rebaseを特定のsvnリビジョンにgitできますか? (svn up -r ...と同様)
- 24. webappsとsvnを同期するヒント?
- 25. ローカルとリポジトリのSVNリビジョンを比較するには?
- 26. svnとmercurialのレポを同期
- 27. SVNとSFTPとの同期化
- 28. SVNからSVNへの同期 - マスタ/スレーブ
- 29. ソースコードにSVNリビジョン番号を含める
- 30. 最後のsvnリビジョンからJenkins CIのSFTPにファイルをアップロード
SubWCRevは、TortoiseSVNを使用しない(希望している)人には別途入手できます。http://sourceforge.net /project/showfiles.php?group_id=138498&package_id=281312 – Stefan
クール、私はそれを知らなかった! –
よくわかります:) –