我想使用TeamFoundation .NET库从TFS下载文件夹。我可以单独下载文件,但是花费的时间太长。有没有办法将整个目录下载为ZIP或类似格式?
这是我当前正在使用的代码。
var client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetToken));
//Connect to TFS server.
var tfs = new TfsConfigurationServer(new Uri("tfs server url"), new NetworkCredential("username", "password", "domain"));
tfs.EnsureAuthenticated();
//Get the default collection id.
var collectionId = new Guid(tfs.CatalogNode.QueryChildren(new[] { CatalogResourceTypes.ProjectCollection }, false, CatalogQueryOptions.None).First().Resource.Properties["InstanceId"]);
//Get the default collection.
var collection = tfs.GetTeamProjectCollection(collectionId);
//Download files.
var server = collection.GetService<VersionControlServer>();
var items = server.GetItems(application.branch_directory + "/" + environment.name, VersionSpec.Latest, RecursionType.Full, DeletedState.NonDeleted, ItemType.Any, true).Items;
foreach (var item in items)
{
var target = Path.Combine(Path.Combine(applicationDirectory, "$"), item.ServerItem.Substring(2));
if (item.ItemType == ItemType.Folder && !Directory.Exists(target))
{
Directory.CreateDirectory(target);
}
else if (item.ItemType == ItemType.File)
{
item.DownloadFile(target);
}
}
答案 0 :(得分:1)
您可以使用Rest API--Get a specific version来执行此操作,并使用httpclient调用Rest API。
您可以在获取文件,压缩文件夹或获取项目元数据时指定要获取的版本。
此格式应用于某些文件(如web.config),由于默认的ASP .NET保护,使用路径作为URL的一部分无法访问这些文件(如web.config)。响应是一个包含文件内容的流(application / octet-stream)。
http://fabrikam-fiber-inc.visualstudio.com/defaultcollection/_apis/tfvc/items?path=$/fabrikam-fiber-tfvc/website/website/web.config&api-version={version}
使用路径作为查询参数时需要压缩文件。
要获取整个文件夹,您可以将其压缩并与Rest Api以以下格式下载:
[Get] https://xxx/defaultcollection/_apis/tfvc/items?path=<Folder Path>&api-version=1.0
并在请求标头中添加以下内容:Accept: application/zip
供参考的代码示例:How to stream zip file from TFS api
答案 1 :(得分:0)
我找到了使用TeamFoundation .NET库的解决方案。
//Connect to TFS server.
var tfs = new TfsConfigurationServer(new Uri("tfs server"), new VssCredentials(new Microsoft.VisualStudio.Services.Common.WindowsCredential(new NetworkCredential("username", "password", "domain"))));
tfs.EnsureAuthenticated();
//Get the default collection id.
var collectionId = new Guid(tfs.CatalogNode.QueryChildren(new[] { CatalogResourceTypes.ProjectCollection }, false, CatalogQueryOptions.None).First().Resource.Properties["InstanceId"]);
//Get the default collection.
var collection = tfs.GetTeamProjectCollection(collectionId);
//Download files.
var server = collection.GetClient<TfvcHttpClient>();
var zip = Path.GetTempFileName();
var stream = File.Create(zip);
var item = server.GetItemZipAsync(application.branch_directory + "/" + environment.name).Result;
item.CopyTo(stream);
stream.Close();
try
{
ZipFile.ExtractToDirectory(zip, applicationDirectory);
}
catch
{
throw new Exception("Unable to unzip the file: " + zip);
}
答案 2 :(得分:0)
@kernowcode这些对我有用:
modA
但这是简单的部分。查找DLL的/包是另一回事。我使用了这些,但是您的计算机上的版本/路径可能不同
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Framework.Client;
using Microsoft.TeamFoundation.Framework.Common;
using Microsoft.TeamFoundation.SourceControl.WebApi;