次のスニペットは、すべてのクロールコレクションのすべてのチームプロジェクトの定義を構築し、それぞれをチェックし、すべての入力チェンジ番号に協会のために構築していきます:
using System;
using System.Linq;
using Microsoft.TeamFoundation.Build.Client;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;
namespace FindChangesetInBuild
{
class Program
{
static void Main(string[] args)
{
TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://tfs:8080/tfs/collectionName"));
var versionControl = teamProjectCollection.GetService<VersionControlServer>();
var buildService = (IBuildServer)teamProjectCollection.GetService(typeof(IBuildServer));
var teamProjects = versionControl.GetAllTeamProjects(true);
foreach (var teamProject in teamProjects)
{
var buildDefinitions = buildService.QueryBuildDefinitions(teamProject.Name);
foreach (var buildDefinition in buildDefinitions)
{
var builds = buildService.QueryBuilds(buildDefinition);
foreach (var buildDetail in builds)
{
var changesets = InformationNodeConverters.GetAssociatedChangesets(buildDetail);
if (changesets.Any(changesetSummary => changesetSummary.ChangesetId == Convert.ToInt32(args[0])))
{
Console.WriteLine("Changeset was build in "+buildDetail.BuildNumber);
}
}
}
}
}
}
}
言うまでもなくする、これがありますブルートフォース攻撃。
buildDefinition
のリストを絞り込み、特定のteamProjects
などに焦点を当てれば、さらにコードを洗練することができます。いずれにしても、上記のように有用であるとは想像もしません!
(明らかに)MSDNとは別に、TFS-SDKの大きなリソースはShai Raitenのblogです。
Build-Speficicの例については、いくつかの興味深いSOの投稿についてはhere & hereもチェックしてください。
ありがとう!私は、クエリの際に利用可能なフィルタリングオプションがもっとあることを望みます。情報を保持しているビルド数が多く、クエリが返されるまでに非常に時間がかかります。私は実験して見ます。 –