4

シナリオ
私のプロジェクトには、バッチファイルを実行するようにビルド後の段階が設定されています。このバッチファイルは、テキストファイル "version.txt"を読み込みます。バッチファイルはversion.txt内の情報を使用して、this toolを使用してバージョンブロック付きDLLを注入します。テキストファイルが変更されたときに強制的にビルドを古くなるようにするには?

version.txtは簡単に変更できるように私のプロジェクトに含まれています。それは少しのようになります。

@set #Description="TankFace Utility Library" 
@set #FileVersion="0.1.2.0" 
@set #Comments="" 

は、基本的には、バッチファイルは、version.batするには、このファイルの名前を変更し、それを呼び出し、その後、その後version.txtをするために戻ってそれを変更します。

私は(例えば、ファイルのバージョンをインクリメントする)のversion.txtを変更した後、F7を押すと問題
は、ビルドが古くとして見ていないので、ビルド後の段階ではありませんDLLのバージョンは更新されません。

私は実際にビルドの入力として.txtファイルを含めることを望んでいますが、実際にはそれを使用しようとするものはありません。

プロジェクト内のCPPファイルから.txtファイルを#includeすると、コンパイラは "@set"の意味を理解していないため、失敗します。

@setコマンドの前後に/ * ... * /コメントを追加すると、バッチファイルに構文エラーがありますが、最終的には成功します。しかし、これは私が考える貧弱な解決策です。

だから、どうすればいいですか?

答えて

0

これも「ハック」かもしれないが、これはうまくいくかもしれない:

  1. version.txtを更新されているチェックするために迅速なPerlの(など)のスクリプトを記述します。
  2. ファイルが変更されている場合は、プロジェクトでコンパイルされたダミーソースファイルをこのスクリプトで更新します。
  3. スクリプトをビルド前のイベントとして実行します。

スクリプトは、ファイルが変更されたことを見ている場合は、この方法では、それが再ビルドを強制的に他のものを、変更されます。

ハッキーですが、バレルの底をこすっているなら試してみてください。

+0

確かにハッキーです。私はファイルが修正されているかどうかを調べることが必要ないと思っていません、最後に使用したファイルまたは何かを保存しなければならないでしょう...しかし、ボックスの外で考えて良い仕事:) – demoncodemonkey

1

これはVS2005で動作します。それを使用していない場合は、設定の一部が別の場所にあるか、名前が異なる場合があります。

プロジェクトにテキストファイルを追加し、ソリューションエクスプローラで右クリックし、[プロパティ]を選択します。 [構成のプロパティ]> [全般]で、ファイルがビルドから除外されていないことを確認します。 [カスタムビルドステップ]> [一般]で、既存のビルド後コマンドをコマンドライン設定にします。 .txtファイルを出力ファイルとして指定してください。 F7はテキストファイルの変更点を見つけ、バッチファイルを実行する必要があります。

+0

これは、 version.txtファイルが変更されているかどうかにかかわらず、F7キーを押すたびにこれは私のビルドを遅らせ、私がそれに気づくのに十分です。version.txtが変更されたときにカスタムビルドステップのみを実行する方法を知っていますか? – demoncodemonkey

+0

ええ、私のために同じです。申し訳ありません。しかし、出力ファイルとして.txtファイルを指定することで修正できました。それを試して? –

+0

OKカスタムビルドステップの出力に.txtファイルを追加しました。しかし、今はF7を押すたびにビルドステップが実行され、.txtファイルのタイムスタンプが変更され、毎回ビルドステップが実行されます。私はここに明白な何かが欠けていると確信している...それは確かにこの困難ではないことができますか? – demoncodemonkey

関連する問題