2011-11-16 2 views
4

TFS에서 빌드 정의를 자동화하는 코드가 있습니다.TFS API BranchObjectCreated 이벤트가 실행되지 않습니다.

이제 분기가 생성 될 때마다이 코드를 호출하고 싶습니다.

API를 보면서, 나는 Microsoft.TeamFoundation.VersionControl.Client.VersionControlServerBranchObjectCreatedEvent이 있음을 참조하십시오.

그래서 이벤트를 처리하기 위해 콘솔 앱에 몇 가지 코드를 추가했습니다.

private static void MonitorBranchCreated() 
    { 
     try 
     { 
      TfsTeamProjectCollection tfs = InitialiseTfs(); 

      var vcs = tfs.GetService<VersionControlServer>(); 

      var projects = vcs.GetAllTeamProjects(true); 

      foreach (var project in projects) 
      { 
       project.VersionControlServer.BranchObjectCreated += BranchObjectCreated; 
      } 

      Console.WriteLine("Subscribed to TFS BranchObjectCreated Event - Awaiting Notification..."); 
      Console.ReadLine(); 
     } 
     catch (Exception exception) 
     { 
      DisplayError(exception); 
     } 
    } 

    private static void BranchObjectCreated(object sender, BranchObjectCreatedEventArgs e) 
    { 
     // Create the Build 
    } 

Visual Studio의 소스 제어 탐색기에서 분기를 만들면 이벤트가 발생하지 않습니다.

MSDN 설명서가 제한되어 있으며 다른 사용 예제를 찾을 수 없으므로 누군가가 올바른 접근 방식인지 알려주고 싶습니다.

그렇다면 왜 이벤트가 실행되지 않을까요? 그렇지 않다면 분기 생성과 관련된 이벤트를 처리 할 수 ​​있도록 TFS에 연결할 수있는 또 다른 방법이 있습니까?

답변

4

클라이언트 API에 이벤트를 연결하면 클라이언트이 인 이벤트 만 생성됩니다. BranchObjectCreated 청취자를 연결하려면 VersionControlServer.CreateBranch(), 을 호출 한 다음 브랜치 객체 생성 리스너를 호출해야합니다.

서버의 이벤트 (예 : 다른 사람이 지점을 만들거나 다른 클라이언트에서 지점을 만드는 경우)를 들으려면 서버의 프로젝트 경고 시스템에 연결해야합니다.

Team Foundation Server Power ToolsAlerts Explorer을 설치하면 전자 메일을 보내거나 웹 메서드를 호출하는 프로젝트에 세부적인 경고를 구성 할 수 있습니다. 이 시점에서이 새 분기를 참조하는 새 빌드를 만들 수 있습니다.

+1

감사합니다. 이벤트 서비스를 살펴 보았지만 분기가 생성되는 이벤트가 없습니다. 결국 나는 간격으로 VersionControlServer의 QueryRootBranchObjects를 통해 브랜치를 쿼리하고 이전 쿼리 이후 생성 된 새로운 브랜치로부터 빌드를 생성하는 서비스를 만들었다. – bitsprint

+0

+1, 폴링을 옵션으로 언급 했어야했는데, 그것은 과거에도 큰 성공을 거둔 것입니다. –

관련 문제