Использование API TFS 2010 для подписки на события рабочей области - PullRequest
2 голосов
/ 03 марта 2011

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

Например, если я сопоставляю новую папку в своем рабочем пространстве, я хочу подписаться на событие versionControl.UpdatedWorkspace, а если я получаю «get», я хочу сопоставить с событием versionControl.Getting.Приведенный ниже код представляет собой консольное приложение, которое, я думаю, должно работать, но когда я получаю, ничего не происходит.Кто-нибудь знает, как успешно подписаться на эти события?

VS2010, TFS 2010, WinXP SP3

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Text;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Framework.Client;
using Microsoft.TeamFoundation.Framework.Common;
using Microsoft.TeamFoundation.VersionControl.Client;

namespace TestEventHanling
{
    class Program
    {
        static void Main(string[] args)
        {
            Uri serverUri = new Uri(@"http://TfsServer:8080/tfs/collection");

            using (TfsTeamProjectCollection collection = new TfsTeamProjectCollection(serverUri, CredentialCache.DefaultCredentials))
            {

                VersionControlServer versionControl = (VersionControlServer)collection.GetService(typeof(VersionControlServer));
                versionControl.UpdatedWorkspace += new WorkspaceEventHandler(OnUpdatedWorkspace);
                versionControl.Getting += new GettingEventHandler(OnGetting);

                Console.WriteLine("Press \'q\' to quit.");
                while (Console.Read() != 'q') ;

            }
        }


        internal static void OnUpdatedWorkspace(object sender, WorkspaceEventArgs e)
        {
            foreach (WorkingFolder wf in e.Workspace.Folders)
            {
                Console.WriteLine("Workspace updated {0}", wf.ServerItem);
            }
        }

        internal static void OnGetting(Object sender, GettingEventArgs e)
        {
            Console.WriteLine("Getting: {0}, status: {1}", e.TargetLocalItem, e.Status);
        }


    }
}

1 Ответ

1 голос
/ 04 марта 2011

Насколько я понимаю, это события в вашем локальном экземпляре VersionControlServer. То есть они сработают, когда вы будете действовать в этом экземпляре в своем коде.

Например, если где-то в вашем коде вы обновили рабочее пространство, обработчик UpdatedWorkspace сработает.

Существует меньший набор событий, на которые вы можете подписаться на стороне сервера (регистрация, сборка и т. Д.), Но я не уверен, что вы можете отслеживать то, что происходит на сервере, с помощью класса VersionControlServer.

...