8

ローカル TFS の代わりに Team Foundation Service を使用しています。私たちのソリューションは Visual Studio 2012 で作成されました。私の問題は、すべてのアセンブリに同じバージョン番号を付けたいということです (この部分は、すべてのプロジェクトにリンクされている CommonAssemblyInfo.cs を使用することで既に解決されています)。私が今直面している問題は、アセンブリ バージョンの最後の桁に tfs 変更セット番号が必要なことです (たとえば、1.0.0.4711 の場合、4711 は変更セット番号です)。いくつかの例を見つけましたが、どれもうまくいきませんでした。そして、はい、私は特にここでスタックオーバーフローをたくさん検索しました。

また、MSBuild スクリプトを調べたことがないことも認めなければなりません...

これを達成する方法についてのヒントを教えてください。たとえば、Team Foundation Service (ローカル TFS ではない) で MSBuild Extension Pack を使用することは可能ですか? また、その方法は?

いつものように、時間は私の最悪の敵です...

4

3 に答える 3

2

2010年以降、TfsはパッケージのビルドにWindowsワークフローを採​​用していることに注意してください。ワークフローは、プロジェクトのコンパイルのみにmsbuildを呼び出しますが、この方法でチェンジセットを渡して、かなり多くのホップをmsbuildに渡すことができます。以下は問題に対処しますが、リンクされたソリューションは必要以上に複雑です。 アセンブリバージョンはTFS 2010ビルドごとに自動的に更新できますか?

これは、カスタムビルドアクティビティに関する一連のチュートリアルの中で最も優れたものの1つであり、作成者もスタックに含まれていると思います。具体的には、 http: //www.ewaldhofman.nl/post/2010/05/13/Customize-Team-のバージョン管理についてです 。 Build-2010-e28093-Part-5-Increase-AssemblyVersion.aspx

つまり、ソースファイルでコンパイルする前に実行するカスタムアクティビティが必要であり、すべてのCommonAssemblyInfo.csファイルを検索し、このリストをカスタムアクティビティにフィードします。これにより、完全なバージョン番号の渡された値で内部の値が変更されるか、チェンジセットとオプションでチェックインされます。変更(おそらく、変更セットが同期しなくなるためではありません)。

また、 https: //tfsbuildextensions.codeplex.com/アクティビティのセットを確認することもできます。それらの中にはTfsVersionアクティビティがあり、少なくとも例が提供されます。

これに必要な機能は、チームエクスプローラーとソース管理から利用できる必要があります-カスタムアクティビティアセンブリとビルドテンプレートは通常、チームプロジェクトルートのフォルダーにあります-このフォルダーの場所はビルドコントローラー用に定義されており、チームエクスプローラービルドで変更できますセクション。

チェンジセットは値BuildDetail.SourceGetVersionから入手できます。これが2012年に修正/変更されたかどうかはわかりませんが、2010年にはこの値に関して2つの問題がありました。

  1. デフォルトのビルドテンプレートのGetVersionオーバーライドを尊重しません-オーバーライドが使用されている場合は手動で更新する必要があります
  2. 最新のビルド(オーバーライドなし)を実行すると、tfsから最後のチェンジセット番号が取得されます。ブランチによっては、ビルドのブランチの「最後の」チェンジセットと同じでない場合があります。これに対応するか、ビルドごとにオーバーライドを提供するか、ブランチ履歴で最後のチェンジセット値をチェックして再度オーバーライドするアクティビティを実装する必要があります。

GetVersionは、変更セット、日付、ラベルなど、すべてのsourcespecバージョンを受け入れることができるはずであることに注意してください。詳細を提供するのに十分なほどこれをいじったことはありません。

于 2013-02-06T11:15:28.927 に答える
1

Colin Dembovsky は、TFS 2013 ビルド定義の新しいプレビルド スクリプト設定を使用して、バージョンの埋め込みを行う方法の優れた概要を書きました。

Changeset 番号は、環境変数TF_BUILD_SOURCEGETVERSIONのビルド前プロセス内で簡単にアクセスできます。上記の Dembovsky の作業に基づくスクリプトを使用して、これを使用してバイナリに Changeset 値を埋め込むことができました。(私はPowerShellではなくPerlを使用したので、おそらく見たくないでしょう;-)

このアプローチでは、ビルド ワークフローを変更する必要がないため、私にとっては大きなメリットです。

于 2014-06-11T17:41:06.453 に答える
0

私はWintellect のソリューションを使用しました- MSBuild のみで、TFS マジックは必要ありません。また、自動生成された CSharp ファイルに次のように追加しました。
[assembly:AssemblyInformationalVersion("$(BuildNumber)")]
つまり、TFS ビルド番号を取得します。

于 2013-02-06T13:47:40.850 に答える