6

継続的インテグレーションのために、tfspreview で ChangeSetId を取得する必要があります。この単一の数字だけが必要です。見つけられる可能性のあるすべての MSBuild タスクを試しましたが、別の小さな問題が常に私を止めています。

私が得るためMSBuild.ExtensionPack.Tfs.TeamBuildに:

Could not load file or assembly 'Microsoft.TeamFoundation.Client, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'

およびTfsClient -taskコミュニティパック(次の exec: を生成しているtf.exe history . /StopAfter:1 /noprompt /format:detailed /recursive)の場合、次のようになります。

The specified task executable could not be run. The system cannot find the file specified

私の質問は; TF.exetfspreview サーバーで実行することは可能ですか? または、ビルド サーバーでアセンブリを取得してMicrosoft.TeamFoundation.Client、これら 2 つのタスクのいずれかを実行できますか?

4

3 に答える 3

7

わかりました、API などを使用して独自のカスタム タスクを作成しなくても、これは可能であることをお伝えするためにここにいます。StackOverflow に関する記事は多数ありますが、ソリューションを含む記事は TFS 2010 では機能しないようです。丸一日頭を壁にぶつけて過ごしました :D

  1. MSBuild コミュニティ タスクをインストールする必要があります。https://github.com/loresoft/msbuildtasksから最新バージョンを入手してください。最新のものは、TFS 2010 アセンブリに対して更新および再構築されたようです。

  2. MSBuild.Community.Tasks.Tfs.TfsClient タスクを使用します。実行可能ファイルを実行できないというエラーが発生する理由は、これが MSBuild ToolTask​​ であり、実行可能ファイルへのパスをプロパティ (ToolPath) としてタスクに渡す必要があるためです。

  3. TfsClient タスクは tf.exe の単なるラッパーであり、タスクには MSbuild の方法でスイッチを処理するための多くの機能がありません。(そして、このタスクのドキュメントは存在しません - 私はコードを見なければなりませんでした) 幸いなことに、すべてのコマンド ライン スイッチをコマンド自体の一部として入力できることがわかりました。

  4. したがって、最終的な呼び出しは次のようになります...

    <MSBuild.Community.Tasks.Tfs.TfsClient ToolPath="$(PathToTfTool)"
                                       Command="history /collection:$(TfsProjectCollectionUrl) /stopafter:1 /version:T /format:detailed $(VersionControlPathForBuildWorkspace)"
                                       Recursive="true"
                                       >
    

    <Message Text="TFS ChangeSetNumber: $(ChangesetNumber)" />
    

そして、22回の惨めな失敗したビルドまたはデータのないビルドの後、最終的に取得しました... TFS ChangeSetNumber: 41

ヤフー!

Martin Woodward からコマンドを受け取りました: http://www.woodwardweb.com/vsts/determining_the.html /DETAILED スイッチを使用していることを確認してください。タスクのコードを見て、これを理解するために tf.exe からの出力を解析する方法を理解する必要がありました。

TfsClient のコードは参考用です: https://github.com/loresoft/msbuildtasks/blob/master/Source/MSBuild.Community.Tasks/Tfs/TfsClient.cs

于 2012-10-16T21:19:44.373 に答える
2

これが私のために働いたコード行です..数時間と数回の試行の後。違いは、出力 TaskParameter 要素を

どこ:

  • ToolPath ="C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE" - 32 ビットか 64 ビットかによって異なります。

  • $/WorkspacePath ワークスペースのパス名。これは tf workspace コマンドを使用して表示できます

    <MSBuild.Community.Tasks.Tfs.TfsClient ToolPath="C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE"
                                   Command="history /s:http://tfsserver01:8080/tfs/collectionname /stopafter:1 /version:T /format:detailed $/WorkspacePath"
                                   Recursive="true" >
      <Output TaskParameter="Changeset" PropertyName="ChangesetNumber"/>
    </MSBuild.Community.Tasks.Tfs.TfsClient>
    <Message Text="TFS ChangeSetNumber: $(ChangesetNumber)" />
    

でもこのスレのおかげで

于 2013-06-03T08:23:50.000 に答える
0

MSBUILD ワークフローは正確にはどのようなものですか? このパラメーターを MSBUILD に渡していますか、または MSBUILD の実行中にカスタム コンポーネントがこの情報を取得していますか?

IBuildDetailを受け取り、IChangesetSummaryのリストを返すメソッドGetAssociatedChangesetsを持つクラスInformationNodeConvertersに出くわしました。これには、MSBUILD タスクに到達する前に、変更セットが既に関連付けられている必要もあります。ビルド テンプレートを編集できるかどうかを確認するために、今夜 TFSPreview インスタンスを確認する必要がありますが、このようなものを使用できるはずです。

于 2012-08-13T14:06:29.913 に答える