C# 在C';中以编程方式获取所有TFS分支#
我正试图以编程方式获取VisualStudio2013 TFS中所有分支的列表。在做了一些研究之后,我发现了这个博客,其中详细介绍了如何获得分支: 我修改了代码,将所有内容存储在一个列表中C# 在C';中以编程方式获取所有TFS分支#,c#,tfs,C#,Tfs,我正试图以编程方式获取VisualStudio2013 TFS中所有分支的列表。在做了一些研究之后,我发现了这个博客,其中详细介绍了如何获得分支: 我修改了代码,将所有内容存储在一个列表中 private void Setup() { string serverName = "serverName"; //in the code this is set to the actual server name TfsTeamProjectCollection
private void Setup()
{
string serverName = "serverName"; //in the code this is set to the actual server name
TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri(serverName));
VersionControlServer vcs = tfs.GetService<VersionControlServer>();
var bos = vcs.QueryRootBranchObjects(RecursionType.OneLevel);
Array.ForEach(bos, (bo) => DisplayAllBranches(bo, vcs));
}
private void DisplayAllBranches(BranchObject bo, VersionControlServer vcs)
{
_listOfBranches.Add(bo.Properties.RootItem.Item);
var childBos = vcs.QueryBranchObjects(bo.Properties.RootItem, RecursionType.OneLevel);
foreach (var child in childBos)
{
if (child.Properties.RootItem.Item == bo.Properties.RootItem.Item)
continue;
DisplayAllBranches(child, vcs);
}
}
private void Setup()
{
字符串serverName=“serverName”;//在代码中,这被设置为实际的服务器名称
TfsTeamProjectCollection tfs=新的TfsTeamProjectCollection(新Uri(服务器名));
VersionControlServer vcs=tfs.GetService();
var bos=vcs.QueryRootBranchObjects(RecursionType.OneLevel);
ForEach(bos,(bo)=>DisplayAllBranchs(bo,vcs));
}
私有void显示所有分支(BranchObject bo,VersionControlServer vcs)
{
_添加(bo.Properties.RootItem.Item);
var childBos=vcs.QueryBranchObjects(bo.Properties.RootItem,RecursionType.OneLevel);
foreach(childBos中的变量child)
{
if(child.Properties.RootItem.Item==bo.Properties.RootItem.Item)
继续;
显示所有分支(子分支、vcs);
}
}
我遇到的问题是BranchObjects[]bos总是空的。是否有我遗漏的东西,或者是否有更好的方法来获取所有分支的列表?该代码应该可以正常工作(适合我)。我怀疑您的服务器名称变量中缺少集合名称
如果您有一个合理的标准设置,您的serverName变量格式应该是:
http://ServerName:Port/tfs/CollectionName
so例如:http://tfsServer01:8080/tfs/MyCollection
能否验证vcs对象是否有效?您是否可以执行其他一些操作,例如getitems?
您确定存储库中有分支吗?请注意,“分支对象”是在tfs 2010中添加的,它们并不等同于分支操作。在“源代码管理资源管理器”中,它们有灰色图标,可以使用上下文菜单创建它们。在做了更多的研究之后,我发现了这个问题。我们的TFS结构类似于以下内容:
$/Root
$/Root/Folder
$/Root/Folder/Branch
第一级down不会返回任何分支,因为没有分支。因此,我使用了一种更简单的方法来获取所有的分支
var branchObjects = vcs.QueryRootBranchObjects(RecursionType.Full);
foreach (var branch in branchObjects)
{
var branchName = branch.Properties.RootItem.Item;
var parentFolder = branchName.Substring(0, branchName.LastIndexOf('/'));
if (!_listOfBranches.Contains(parentFolder))
{
_listOfBranches.Add(parentFolder);
}
_listOfBranches.Add(branchName);
}
_listOfBranches.Sort();
这不是目前最干净的方法。但是它能够检索指定项目的所有分支,以及父文件夹(目前不包括根文件夹)。感谢您的反馈。问题不在于服务器名称。问题是第一级是包含分支的文件夹。意识到这一点后,我能够解决这个问题。我已经发布了解决方案。