現在、Delphi XE から Delphi XE3 への切り替えを進めており、ビルド前のイベントで深刻な問題が発生しています。
ビルド前のイベントは次のようになります。
SubWCRev "<SVN-Path>" "<InputFile>" VersionInfo.rc
brcc32 -foProject.res VersionInfo.rc
(これら 2 つのコマンドは別々の行に表示され、「実際の」コマンドには絶対パスが含まれていることに注意してください)。つまり、まず作業コピーから現在の SVN バージョンを抽出し、この情報を VersionInfo.rc に書き込み、次に Borland リソース コンパイラを使用します。リソースファイルを生成します。
これは以前の Delphi バージョンでは完全に機能していましたが、XE3 でプロジェクト オプションを開くたびに、XE3 はこれを次のように変換します。
SubWCRev "<SVN-Path>" "<InputFile>" VersionInfo.rc &brcc32 -foProject.res VersionInfo.rc
(これは 1 行であり、両方のコマンドが 1 つのアンパサンドで区切られていることに注意してください)。これにより、ビルドが失敗します。
現在の回避策は、これを手動で次のように変更することです。
SubWCRev "<SVN-Path>" "<InputFile>" VersionInfo.rc && brcc32 -foProject.res VersionInfo.rc
つまり、2 つのアンパサンドを使用して、最初のコマンドが成功した場合に 2 番目のコマンドを実行します。
これは機能しますが、プロジェクト オプションを再度編集するまでのみです。Delphi XE3 は常にビルド前イベントを台無しにします :-(
これに対する解決策/回避策を知っている人はいますか? SubWCRev と brcc32 を呼び出す単純なコマンド ライン ツールを作成できると思いますが、より単純なソリューションを希望します。
更新: このバグを簡単に再現する手順
IDE
- ファイル -> 新規 -> VCL フォーム アプリケーション (Delphi)
- ビルド プロジェクト 1
- ファイル -> すべて保存、提案された名前を保持 Unit1.pas / Project1.dpr
- プロジェクト -> オプション
- ターゲット「すべての構成 - すべてのプラットフォーム」を選択
ビルド イベント -> ビルド前のイベント、次のように入力します (2 行、書式設定のため申し訳ありません)。
エコー 1 > out.txt
エコー 2 >> out.txt
IDE からプロジェクトをビルドする
- プロジェクトを保存して閉じる
RAD Studio コマンド プロンプト
- プロジェクト ディレクトリに移動します。
- msbuild Project1.dproj => OK
IDE
- プロジェクト -> オプション
- 「検索パス」をクリックします
- 入力します"
- 「あ」を削除
- OKをクリック
- 「検索パス」をクリックします
- プロジェクト -> プロジェクトのビルド
- プロジェクトを保存して閉じる
RAD Studio コマンド プロンプト
- msbuild Project1.dproj => エラー