0

这是我试图访问 TFS Server SourceControl 的一段代码:

TeamFoundationServer tfs = new TeamFoundationServer("http://test-server:8080/tfs/CollectionName");
VersionControlServer sourceControl = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));

RecursionType recursion = RecursionType.OneLevel;
Item[] items = null;
ItemSet itemSet = sourceControl.GetItems("$/Product/", recursion);
items = itemSet.Items;

但是sourceControl当我调试代码时,我得到的是一个空值。我的 TFS 服务器路径也是正确的,我没有得到变量中的值sourceControl

4

3 回答 3

1

找不到您的服务器:

TeamFoundationServer.GetServiceNull如果找不到服务,则方法返回。

请参阅:MSDN 文档

telnet确保程序可以访问端口(检查防火墙并尝试test-server:8080

此外,正如评论所建议的,TeamFoundationServer.EnsureAuthenticated 方法可以帮助指出 URI 何时无效。

于 2014-02-10T07:46:29.110 回答
0

不要编写硬编码的 TFS 路径,而是尝试使用以下代码来搜索所有在线 TFS 项目。

List<RegisteredProjectCollection> projectCollections = new List<RegisteredProjectCollection>((RegisteredTfsConnections.GetProjectCollections()));

        // filter down to only those collections that are currently on-line
        var onlineCollections =
            from collection in projectCollections
            where collection.Offline == false
            select collection;

        // fail if there are no registered collections that are currently on-line
        if (onlineCollections.Count() < 1)
        {
            Console.Error.WriteLine("Error: There are no on-line registered project collections");
            Environment.Exit(1);
        }

        // find a project collection with at least one team project
        foreach (var registeredProjectCollection in onlineCollections)
        {
            var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(registeredProjectCollection);

            Workspace workspace = null;
            Boolean createdWorkspace = false;
            String newFolder = String.Empty;

            try
            {
                var versionControl = (VersionControlServer)projectCollection.GetService(typeof(VersionControlServer));

                var teamProjects = new List<TeamProject>(versionControl.GetAllTeamProjects(false));
            //.......
            }
        }
于 2014-02-10T09:00:58.890 回答
0

您尝试以下代码行。这将带您进入对话框窗口以选择在线 TFS 项目。如果里面有任何在线项目,请选择项目并单击“连接”按钮。如果成功,那么您应该获得 VersionControlServer 的实例,否则系统响应您的任何内容都是有效的,因为您没有任何在线项目要连接。

                 TfsTeamProjectCollection _tpc = null;
                 using (var picker = new TeamProjectPicker(TeamProjectPickerMode.NoProject, false))
                 {
                     if (picker.ShowDialog() == DialogResult.OK)
                     {
                        _tpc = picker.SelectedTeamProjectCollection;
                     }

                     if (_tpc == null)
                     {
                         MessageBox.Show("Please select a team project.");
                         return;
                     }

                    var versionControl = (VersionControlServer)_tpc.GetService(typeof(VersionControlServer));
于 2014-02-11T12:03:38.913 回答