在上一篇《TFS二次開發01——TeamPRojectsPicher》介紹了 TeamProjectsPicher 對象,使用該對象可以很簡單的實現連接TFS。
但是如果我們要實現自定義的UI客戶端 或者我們要做一個非WinForm版的TFS客戶端(比如Web 或者WPF),那么TeamProjectsPicher 對象就無能為力了。那我們就只能自己實現了。
這篇文章主要介紹:
1:連接TFS Server
2:獲取所有TfsTeamProjectCollection
3:獲取某個TfsTeamProjectCollection 下的所有Team Project
添加命名空間
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Framework.Client;
using Microsoft.TeamFoundation.Framework.Common;
using Microsoft.TeamFoundation.VersionControl.Client;
//想要連接TFS,肯定先要知道TFS 的地址 string tfsServerURL = "http://192.168.83.70:8080/tfs"; Uri configurationServerUri = new Uri(tfsServerURL); //與TFS服務器連接 TfsConfigurationServer configurationServer = TfsConfigurationServerFactory.GetConfigurationServer(configurationServerUri);
/// <summary> /// 查詢所有指定TFS服務上的所有TeamProjectCollection 信息 /// </summary> /// <param name="tfsServerURL"></param> /// <returns></returns> List<TfsTeamProjectCollection> GetAllTeamProjectCollection(string tfsServerURL) { Uri configurationServerUri = new Uri(tfsServerURL); //與TFS服務器連接 TfsConfigurationServer configurationServer = TfsConfigurationServerFactory.GetConfigurationServer(configurationServerUri); List<TfsTeamProjectCollection> lst = new List<TfsTeamProjectCollection>(); //TFS目錄節點 CatalogNode configurationServerNode = configurationServer.CatalogNode; //查詢當前TFS下的所有TeamProjectCollection ReadOnlyCollection<CatalogNode> tpcNodes = configurationServerNode.QueryChildren( new Guid[] { CatalogResourceTypes.ProjectCollection }, false, CatalogQueryOptions.None); //遍歷每一個TeamProjectCollection 節點 foreach (CatalogNode tpcNode in tpcNodes) { //獲取 當前 team project collection 名稱. String displayName = tpcNode.Resource.DisplayName; // 獲得 當前 team project collection 描述. String description = tpcNode.Resource.Description; //獲取當前 team project collection 的描述. ServiceDefinition tpcServiceDefinition = tpcNode.Resource.ServiceReferences["Location"]; ILocationService configLocationService = configurationServer.GetService<ILocationService>(); Uri tpcUri = new Uri(configLocationService.LocationForCurrentConnection(tpcServiceDefinition)); // 真正的連接到team project collection TfsTeamProjectCollection tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tpcUri); lst.Add(tpc); } return lst; }TfsTeamProjectCollection 對象常用屬性:
TfsTeamProjectCollection. CatalogNode. Resource.DisplayName // team project collection 名稱.
TfsTeamProjectCollection .Name // team project collection 名稱.
TfsTeamProjectCollection .Uri // team project collection Url 信息.
TfsTeamProjectCollection. CatalogNode. Resource. Description // team project collection 描述.
TeamProject[] GetAllTeamProject(TfsTeamProjectCollection tpc) { List<TeamProject> lst = new List<TeamProject>(); VersionControlServer version = tpc.GetService(typeof(VersionControlServer)) as VersionControlServer; return version.GetAllTeamProjects(true); }由于我們在實際應用中連接到TFS時,只能連接一個TfsTeamProjectCollection 。所以如果我們知道了該TfsTeamProjectCollection的Url 那么就可以免去上面的步驟,代碼乳如下:
/// <summary> /// 獲取所有的TeamProject /// </summary> /// <returns></returns> TeamProject[] GetAllTeamProject(string tpcURL) { //連接到team project collection ,使用此方式直接連接TFS時 TfsTeamProjectCollection. CatalogNode 為 none 。 //因為在使用時通常是只連接到一個Team project collection ,所有更多的時候我們使用這種方式連接TFS TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(tpcURL)); //版本控制 VersionControlServer version = tpc.GetService(typeof(VersionControlServer)) as VersionControlServer; //獲取所有TeamProject return version.GetAllTeamProjects(true); }結合上面的代碼可以實現如下圖所示的效果:

TeamProjectFolderOptions project = new TeamProjectFolderOptions("project1"); version.CreateTeamProjectFolder(project);新聞熱點
疑難解答