Я использую API-интерфейс VSTS 2018 для получения сжатых файлов решений на основе sourcepath и sourceversion.Чтобы получить sourceVersion, я запрашиваю его, используя имя teamproject и buildId.
Проблема в том, что мне также нужно получить все зависимые проекты.Вопрос в том, как я могу получить teamProject и buildId для всех зависимых проектов в архивированном решении, чтобы я также мог получить архивированные файлы для них.Вот код для получения сжатого файла решения:
internal async Task<string> GetSolutionFromSource(string sourcePath, string sourceVersion)
{
var solutionFile = string.Empty;
using (var handler = new HttpClientHandler { Credentials = new NetworkCredential(tfsUser, tfsPass) })
using (var client = new HttpClient(handler))
{
try
{
client.BaseAddress = new Uri(tfsServer);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream"));
var url = $"DefaultCollection/_api/_versioncontrol/itemContentZipped?path={sourcePath}&version={sourceVersion}";
var solution = sourcePath.Substring(sourcePath.LastIndexOf('/') + 1);
var directory = CreateDirectory(solution, sourcePath);
var zipFile = string.Empty;
log.Debug("TFS: streaming zipped solution ");
zipFile = $"{directory}\\solution.zip";
using (var file = await client.GetStreamAsync(url).ConfigureAwait(false))
using (var fs = new FileStream(zipFile, FileMode.OpenOrCreate))
{
await file.CopyToAsync(fs);
fs.Flush();
}
log.Debug("TFS: Extracting zipped solution to a temp folder");
ExtractZip(zipFile, directory);
solutionFile = FindSolutionFile(solution, directory);
log.Debug("TFS: Found solution file at " + solutionFile);
}
catch (Exception ex)
{
log.Error(ex);
throw ex;
}
return solutionFile;
}
}