代码之家  ›  专栏  ›  技术社区  ›  doorman

如何使用VSTS获取依赖的压缩解决方案文件

  •  1
  • doorman  · 技术社区  · 6 年前

    我正在使用VSTS API 2018检索基于sourcepath和sourceversion的压缩解决方案文件。要获取源版本,我使用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;
                }
            }
    
    0 回复  |  直到 6 年前