Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C';中以编程方式获取所有TFS分支#_C#_Tfs - Fatal编程技术网

C# 在C';中以编程方式获取所有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

我正试图以编程方式获取VisualStudio2013 TFS中所有分支的列表。在做了一些研究之后,我发现了这个博客,其中详细介绍了如何获得分支:

我修改了代码,将所有内容存储在一个列表中

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();

这不是目前最干净的方法。但是它能够检索指定项目的所有分支,以及父文件夹(目前不包括根文件夹)。

感谢您的反馈。问题不在于服务器名称。问题是第一级是包含分支的文件夹。意识到这一点后,我能够解决这个问题。我已经发布了解决方案。