私は現在、VS2010 のビルド前後のイベントをいじっており、SVN のバージョン番号を AssemblyInfo.cs ファイルに取得しようとしているため、ビルド dll にコンパイルされています。
ビルド前に AssemblyInfo.cs ファイルを更新するスクリプトを実行し、ビルド後の手順でそれをゼロにリセットするスクリプトを実行します。
これを行いたいのは、最新バージョンを残すと、SVN はこれを変更と見なし、コミットされ、SVN バージョン番号を更新して別の変更をもたらすためです。これはちょっと再帰的になります。
私が遭遇した問題は、ビルド前のステップで更新されたものではなく、ビルドが元のバージョンのファイルを取得することです。
したがって:
(テストとして)ファイルのバージョン番号を手動で次のように設定した場合:
[assembly:AssemblyVersion("1.0.0.123")]
次に、ビルド前に次のように更新します。
[assembly: AssemblyVersion("1.0.0.456")]
その後、ビルド後の更新で次のように更新されます。
[assembly: AssemblyVersion("1.0.0.0")]
ビルドされた dll を見ると、バージョンは 1.0.0.123 です。
ビルドが開始される前にビルド前のステップが完了していることを確認しましたが、(notepad.exe などを呼び出して) 長時間待機しても、VS2010 は更新されたファイルを取得できません。
この動作は、ビルド前のコマンドに notepad.exe を追加するだけで確認できます。AssemblyInfo.cs ファイルを手動で変更します。メモ帳を閉じるまでビルドは開始されませんが、メモ帳を閉じると元のバージョンのファイルでビルドされます。
プレビルドが機能するはずの方法で、ここで何かが欠けていますか? ビルドで更新されたファイルを強制的に取得して使用する方法はありますか?
手がかりをいただければ幸いです:)