独自のビルド番号を生成する必要がある BuildNumberOverrideTarget を使用せずにビルド番号 (20080213.1) を同期する方法があるかどうか疑問に思っていますか? 基本的に、デフォルト/組み込みの tfs ビルド番号ジェネレーターを使用したいのですが、それにアクセスして、アセンブリのバージョンをそれに合わせたいと考えています。これを行うことはできますか?このようにするのは賢明な方法ですか?
2 に答える
あなたが求めていることは非常に賢明であり、これを達成する方法はたくさんあります。
個人的には、これを行うとき、ビルド サーバーが生成した番号を持つファイルをバージョン管理にチェックインするのは好きではありません。ブランチ間でコードをマージするときにあまりにも多くの頭痛の種が発生するだけでなく、既知のバージョン番号も好きです。開発者がワークステーション ビルドと適切なビルド サーバーから派生したアセンブリを実行するときに使用して、それらを簡単に区別できるようにします。
私のやり方の詳細については、TFS Build Recipies wiki を参照してください。
またはトピックに関する私のブログ投稿
それが役立つことを願って、
マーティン。
はい、できます。ある時点で、おそらく AfterGet で、BuildNumber を使用してカスタム タスクを作成し、ソース コード内の AssemblyInfo.cs ファイルを更新できます。
AfterGet にフックして、ターゲットを依存させました。
<Target Name="AfterGet" DependsOnTargets="VersionAssemblies" />
VersionAssemblies ターゲットは、$(SolutionRoot) からすべての AssemblyInfo.cs ファイルをプルします。
<CreateItem Include="$(SolutionRoot)\**\AssemblyInfo.cs;">
<Output TaskParameter="Include" ItemName="AssemblyInfos"/>
</CreateItem>
それらをチェックアウトします:
<Exec Command="$(TfCommand) checkout "AssemblyInfo.cs" -r"
WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="true"/>
それらを編集し、ファイル バージョンを $(BuildNumber) に置き換えます。
<File.Replace Path="%(AssemblyInfos.FullPath)"
NewValue="AssemblyFileVersion("$(BuildNumber)")"
RegularExpression="AssemblyFileVersion\(\"(\d+.\d+.\d+.\d+)\"\)"
IgnoreCase="true"
Force="true"/>
次に、ファイルをチェックインします。
<Exec Command="$(TfCommand) checkin /override:"Automated" /comment:"Update AssemblyInfo files to version number $(BuildNumber) - $(NoCICheckinComment) " /noprompt "AssemblyInfo.cs" /recursive"
WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="false"/>
ファイル バージョンの置換には、CodePlex の Microsoft SDC タスクに付属する File.Replace タスクを使用します。
また、チェックインでトリガーされるビルドがある場合は、AssemblyInfo.cs ファイルをチェックインするときに、コメントに $(NoCICheckinComment) が含まれていることを確認してください。これにより、TFS が別のビルドをトリガーしなくなります。ビルドの無限ループ。