簡體   English   中英

無法通過 web api 連接到 TFS2015 服務器

[英]Trouble connecting to the TFS2015 server via web api

我一直在嘗試通過 web api 連接到我們的 TFS2015 服務器。 我以前沒有這樣做過。 我的目標是獲得最后一次成功構建,從他那里獲取所有變更集,並為每個變更集提供一個信息,它是從哪個分支轉發到發布分支的。 我無法連接到它,不知道下一步是什么。

這是我的代碼:

private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            VssConnection connection = new VssConnection(new Uri("http://srv-tfs2015:8080/tfs/"), new VssCredentials(useDefaultCredentials: true));

            Microsoft.TeamFoundation.Build.WebApi.BuildHttpClient buildKlijent = connection.GetClient<Microsoft.TeamFoundation.Build.WebApi.BuildHttpClient>();

            var lastBuild = buildKlijent.GetLatestBuildAsync("Argosy", "Argosy32New");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

lastBuild 包含一個帶有消息的 VssResourceNotFountException:

API 資源位置 54481611-01f4-47f3-998f-160da0f0c229 未在http://srv-tfs2015:8080/tfs/ 上注冊

構建駐留在團隊項目 Argosy 中,它是服務器上 ArgosyCollection 的一部分,它是一個 XAML 構建定義。 不確定這是否有任何區別。

你能幫我指出正確的方向嗎?

獲取最新的文檔說你必須使用rest api 5.1版。 但是 TFS 2015( API 和 TFS 版本映射)僅支持 2.4。 因此,您必須使用獲取構建列表並通過GetBuildsAsync方法從結果列表中檢測最后一個構建。

作為查看構建定義的最后 10 個構建的示例:

private static void ListBuildDefinitions(string TeamProjectName)
{
    List<BuildDefinitionReference> buildDefs = BuildClient.GetDefinitionsAsync(TeamProjectName).Result;

    foreach(BuildDefinitionReference buildDef in buildDefs)
    {
       Console.WriteLine("+================BUILD DEFINITION=======================================================");
       Console.WriteLine(" ID:{0, -9}|NAME:{1, -35}|PATH:{2}", buildDef.Id, buildDef.Name, buildDef.Path);
       Console.WriteLine(" REV:{0, -8}|QUEUE:{1, -34}|QUEUE STATUS:{2}", buildDef.Revision, (buildDef.Queue != null) ? buildDef.Queue.Name : "", buildDef.QueueStatus);

       ListBuilds(TeamProjectName, buildDef);
   }
}

private static void ListBuilds(string TeamProjectName, BuildDefinitionReference buildDef)
{
   List<Build> builds = BuildClient.GetBuildsAsync(TeamProjectName, new List<int> { buildDef.Id }).Result;

   if (builds.Count > 0)
   {
       Console.WriteLine("+====================BUILDS================================================================================");
       Console.WriteLine("+    ID      |        NUMBER        |      STATUS     |     START DATE     |    FINISH DATE     | COMMITS");
       Console.WriteLine("+----------------------------------------------------------------------------------------------------------");

        for (int i = 0; i < builds.Count && i < 10; i++)
        {
            var changes = BuildClient.GetBuildChangesAsync(TeamProjectName, builds[i].Id).Result;
            Console.WriteLine(" {0, -12}|{1, -22}|{2, -17}|{3, -20}|{4, -20}|{5}", builds[i].Id, builds[i].BuildNumber, builds[i].Status,
                (builds[i].StartTime.HasValue) ? builds[i].StartTime.Value.ToString() : "",
                (builds[i].FinishTime.HasValue) ? builds[i].FinishTime.Value.ToString() : "", changes.Count);
        }
    }
    else
        Console.WriteLine("+=======================================================================================");
}

在此處檢查 TFS 2015 的可用函數: Pre-Version 4.1 REST API 文檔

嘗試通過添加項目集合名稱和@字符來修改Uri,例如:

VssConnection connection = new VssConnection(new Uri(@"http://srv-tfs2015:8080/tfs/DefaultCollection"), myCredentials);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM