10

VS2010 ソリューション (.NET ではない) では、アプリケーション バージョンの一部として svn リビジョン番号を含めようとしています。

現時点ではメイクファイルは使用せず、VS ソリューション/プロジェクト設定のみを使用します。

コンパイル時に作業コピーのリビジョン番号を取得し、それを変数に格納して、後でコード内で使用してバージョン番号を表示できるようにしたいと考えています。

これまでのところ、svnversion作業コピーの最新バージョンをpre-built eventとして取得することに成功しました。

"C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)

ビルド時に、正しいリビジョン番号がoutputコンソールに返されていることがわかります。

問題は、この値をコード内で使用できる変数にどのように格納できるかということです。

プリコンパイラ変数 ( ) を定義し、それを使用して上記のコマンドの結果をイベント ボックス_SVNREVから直接保存しようとしましたが、うまくいきません。pre-build

_SVNREV="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
%_SVNREV%="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
%_SVNREV="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
$(_SVNREV)="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)

これらのどれも実際には機能しません。

解決策: VS env 内から変数を更新しようとして、どこにも向かっていませんでした。そこで、ビルド前のステップとしてスクリプトを呼び出し、作業コピーの svn リビジョンを取得し、その情報を含むヘッダー ファイルを作成する別のルートを取りました。

svnrev.bat興味のある方はこちら:

@echo off
set cmd="C:\"Program Files\CollabNet\Subversion Client"\svnversion.exe -n %1 "
set versionfile=%1/version.h
FOR /F %%i IN ('%cmd%') DO SET SVNVER=%%i

echo Detected program revision %SVNVER% in %1
echo #pragma once > %versionfile%
echo #define _SVNVER "%SVNVER%" >> %versionfile%
4

4 に答える 4

3

ビルドを行う場合は、標準のビルド システムが必要です。Jenkinsの使用をお勧めします。オープンソースで、使いやすいです。

Jenkins の巧妙なトリックの 1 つは、使用するためにいくつかの優れた環境変数を挿入することです。

  • SVN_REVISION - Subversion のリビジョン番号
  • BUILD_NUMBER - Jenkins のビルド番号
  • JOB_NAME - Jenkins のジョブ名

ビルドに Jenkins の使用を開始すると、後者の 2 つの環境変数はおそらく Subversion リビジョン自体よりも価値のあるものになるでしょう。後者の 2 つはコードをプロジェクトにリンクし、あらゆる種類の優れた情報を提供するからです。

Jenkins は継続的なビルド エンジンです。Jenkins ジョブを設定して、チェックアウトがあるときはいつでも、または 1 日の特定の時間にコマンドでビルドできます。URL の wget を介して build-on-command を送信することもできます。

ビルド サーバーを使用すると、特定のシステムの構成がビルドになんらかの副作用をもたらす可能性を排除できます。ビルド サーバーは既知の構成であり、公式のビルドを生成します。

これは、おそらくあなたが知りたいと思っていた以上のものです。(具体的には、svnversionコマンドを使用してリビジョン番号を取得し、そこから続行することもできます)。ただし、ビルド プロセスは大幅に改善されます。

于 2012-08-21T15:26:26.170 に答える
1

バージョン番号の svn 情報を解析し、それをファイルに書き込み、コンパイルをセットアップしてファイルをコンパイル済みコードに丸呑みする人を見てきました。

SVN の注意点: 古いバージョン (すべてのサブディレクトリに .svn ファイルがある) では、バージョン番号はプロジェクトのルート ディレクトリに対してのみ正しいことが保証されていました。他のディレクトリには、そのサブツリーの最後のコミットのバージョン番号が含まれます。使用しているバージョンはわかりませんが、数回転前の場合は注意してください。

于 2012-08-21T19:32:30.510 に答える