Можно ли получить все проекты и подпроекты, используя TFS API? - PullRequest
2 голосов
/ 16 марта 2011

Я работаю над TFS API. Я пытаюсь получить весь список проектов, подпроектов, файлов из TFS. Может ли кто-нибудь направить меня по этому поводу.

TfsTeamProjectCollection teamProjectCollection = teamFoundationserver.TfsTeamProjectCollection;
ProjectCollection projCollect = (ProjectCollection) teamProjectCollection.GetService(typeof(ProjectCollection));

Приведенный выше код просто показывает первый уровень из TFS. Как я могу пойти дальше вглубь дерева TFS. Мне нужен полный список проектов и решения под каждый проект.

Спасибо, SV

Ответы [ 2 ]

7 голосов
/ 16 марта 2011

Нет такого понятия, как «подпроект». То, что вы хотите сделать, это получить список всех подпапок / файлов в каждом проекте.

Для этого выполните итерацию по каждому из ваших проектов и сделайте GetItems для каждого. Вот некоторый код:

TfsTeamProjectCollection teamProjectCollection = new TfsTeamProjectCollection(new Uri("http://sw100429:8080"));

ProjectCollection projCollect = (ProjectCollection)teamProjectCollection.GetService(typeof(ProjectCollection));

VersionControlServer vcs = teamProjectCollection.GetService<VersionControlServer>();

// This approach lets you get the list of files for each team project individually.

foreach (TeamProject tp in projCollect)
{
    string path = string.Format("$/{0}", tp.Name);
    var filesAndFolders = vcs.GetItems(path, RecursionType.Full);
}


// However, this approach is a bit more succinct - instead
// of getting them for each team project, just start at "$/" and work your way down

var allFilesAndFolders = vcs.GetItems("$/", RecursionType.Full);
1 голос
/ 09 декабря 2015

Используя ваши вопросы и ответы (спасибо), я смог собрать этот образец после многих проб и ошибок.Это еще один шаг, чтобы показать, как отображать локальные пути.Я надеюсь, что это избавит некоторых читателей от головной боли.

Этот пример был собран в форме в VS 2015 и использует следующие ссылки на сборки (которые также были сложны для отслеживания)

Все они расположены в C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ Extensions \ vl45o2it.tph на моей машине.

Microsoft.TeamFoundation.Client.dll
Microsoft.TeamFoundation.Common.dll
Microsoft.TeamFoundation.VersionControl.Client.dll
Microsoft.VisualStudio.TeamFoundation.dll

Извиняюсь, если моя терминология отсутствует.Я не против, если вы отредактируете это.

using System;
using System.Linq;
using System.Windows.Forms;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Framework.Common;
using Microsoft.TeamFoundation.Framework.Client;
using System.Diagnostics;
using Microsoft.TeamFoundation.VersionControl.Client;

namespace Tfs
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            Uri tfsUri = new Uri("http://server:8080/tfs");
            string repositoryName = "yourrepository";
            string projectPath = "$/project/path/path/path";

            Uri repositoryUri = new Uri(string.Format("{0}/{1}", tfsUri.AbsoluteUri, repositoryName));

            TfsConfigurationServer tfscs = TfsConfigurationServerFactory.GetConfigurationServer(tfsUri);

            //get the repository
            CatalogNode repository = tfscs.CatalogNode.QueryChildren(new Guid[] { CatalogResourceTypes.ProjectCollection }, false, CatalogQueryOptions.None)
                .FirstOrDefault(a => string.Compare(a.Resource.DisplayName, repositoryName, true) == 0);

            //open in the project collection
            TfsTeamProjectCollection pc = tfscs.GetTeamProjectCollection(new Guid(repository.Resource.Properties["InstanceId"]));

            //tfs project file structure access
            VersionControlServer vcs = pc.GetService<VersionControlServer>();

            WorkspaceInfo wsi = Workstation.Current.GetAllLocalWorkspaceInfo().FirstOrDefault(a => a.ServerUri == repositoryUri);

            //user functionality (checkin, localpaths etc)
            Workspace ws = wsi.GetWorkspace(pc);

            //get the file structure
            ItemSet items = vcs.GetItems(projectPath, RecursionType.Full);

            foreach (Item i in items.Items)
            {
                Debug.WriteLine(string.Format("{0} ({1}) - {2} - {3}", i.ServerItem,
                                                                       i.ContentLength.ToString(),
                                                                       i.ItemType.ToString(),
                                                                       ws.GetLocalItemForServerItem(i.ServerItem)));
            }
        }

    }
}
...