tfspreview上的tf.exe

zeb*_*bra 6 msbuild tfs msbuildcommunitytasks tfsbuild msbuildextensionpack

我需要在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'
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我的问题是; 是否可以TF.exe在tfspreview服务器上执行?或者我可以在Microsoft.TeamFoundation.Client构建服务器上获取程序集来执行这两个任务之一吗?

Der*_*ore 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-y方式处理交换机的许多可能功能.(并且此任务的文档是不存在的 - 我必须查看代码)幸运的是,我发现您可以输入所有命令行开关作为命令本身的一部分.

  4. 所以你的最终通话看起来像这样......

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

    <Message Text="TFS ChangeSetNumber: $(ChangesetNumber)" />
    
    Run Code Online (Sandbox Code Playgroud)

在22个悲惨的失败构建或构建没有数据后我终于得到了... TFS ChangeSetNumber:41

YAHOO!

得到了马丁伍德沃德的命令: http ://www.woodwardweb.com/vsts/determining_the.html 确认你使用/详细的开关或它返回更换.我不得不查看该任务的代码,并弄清楚它是如何解析tf.exe的输出来解决这个问题的.

TfsClient的代码可供参考:https: //github.com/loresoft/msbuildtasks/blob/master/Source/MSBuild.Community.Tasks/Tfs/TfsClient.cs


Jar*_*gin 0

MSBUILD 工作流程到底是什么样的?您是否将此参数传递给 MSBUILD,或者某些自定义组件在 MSBUILD 运行时获取此信息?

我遇到过InformationNodeConverters类,它具有GetAssociatedChangesets方法,该方法接受 IBuildDetail并返回IChangesetSummary列表。这还要求在执行 MSBUILD 任务之前您的变更集已经关联。今晚我需要检查我的 TFSPreview 实例,看看是否可以编辑构建模板,但我怀疑您应该能够使用类似的东西。