Я пытаюсь получить информацию из определений сборки TFS2015. У нас около 100 определений построения в формате XAML и около 50 в новом формате 2015 года. Сервер является внутренним Team Foundation Server. (Microsoft Visual Studio Team Server Foundation Version 15.105.25910.0)API сервера TFS перечисляет только определения сборки XAML
Я не использую остальное апи но Microsoft.TeamFoundationServer.ExtendedClient как рекомендуемое здесь: https://blogs.msdn.microsoft.com/buckh/2015/08/10/nuget-packages-for-tfs-and-visual-studio-online-net-client-object-model/.
Вот мой пример кода:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Microsoft.TeamFoundation.Build.Client;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Framework.Client;
using Microsoft.TeamFoundation.Framework.Common;
using Serilog;
namespace TFSExperiment
{
class Program
{
// see https://blogs.msdn.microsoft.com/buckh/2015/08/10/nuget-packages-for-tfs-and-visual-studio-online-net-client-object-model/
//Needs nuget package Install-Package Microsoft.TeamFoundationServer.ExtendedClient -Version 14.102.0
// to use serilogg: Install-Package Serilog ; Install-Package Serilog.Sinks.RollingFile
static void Main(string[] args)
{
var myLog = new LoggerConfiguration()
.WriteTo.RollingFile("..\\..\\Applog\\mylog-{Date}.log").CreateLogger();
TfsConfigurationServer configurationServer =
TfsConfigurationServerFactory.GetConfigurationServer(new Uri("https://tfs.inhouseserver2015.org/tfs/"));
ReadOnlyCollection<CatalogNode> collectionNodes =
configurationServer.CatalogNode.QueryChildren(new[] {CatalogResourceTypes.ProjectCollection}, false,
CatalogQueryOptions.None);
CatalogNode defultTfsCol = collectionNodes.AsQueryable().Single(c=>c.Resource.DisplayName.Equals("DefaultCollection"));
Console.WriteLine(defultTfsCol.Resource.DisplayName);
TfsTeamProjectCollection tfsProjectCollection =
configurationServer.GetTeamProjectCollection(new Guid(defultTfsCol.Resource.Properties["InstanceId"]));
tfsProjectCollection.Authenticate();
var buildServer = (IBuildServer)tfsProjectCollection.GetService(typeof(IBuildServer));
ReadOnlyCollection<CatalogNode> projectNodes = defultTfsCol.QueryChildren(
new[] { CatalogResourceTypes.TeamProject },
false, CatalogQueryOptions.None);
foreach (var proj in projectNodes)
{
var buildDefinitionList = new List<IBuildDefinition>(buildServer.QueryBuildDefinitions(proj.Resource.DisplayName));
foreach (var buildDef in buildDefinitionList)
{
Console.WriteLine(buildDef.Name);
myLog.Information($"{buildDef.Id} --{buildDef.Name} --{buildDef.BuildServer.BuildServerVersion} ");
}
}
Console.WriteLine(" Hit any key to exit ");
Console.ReadKey();
}
}
}
Хорошо, может быть, я прочитал его быстро я прочитал о Microsoft.TeamFoundationServer.ExtendedClient:»..Because не каждый API доступен в TFS 2015 или VSO в настоящее время как REST API, там будут случаи, когда должен использовать этот пакет ... »Поэтому я думал, что все в этом. (поэтому имя расширено « –
Я попробовал API Rest, но не получил проверку подлинности Windows, я только System.Net.Http.HttpRequestException: Код состояния ответа не указывает на успех: 401 (неавторизованный). –
Вы пробовали настройку UseDefaultCredentials = true, на вашем объекте WebClient? –