c# – 如何以编程方式检查TFS中的项目映射?
发布时间:2020-12-15 05:40:41 所属栏目:百科 来源:网络整理
导读:我需要找出本地映射的项目或不从代码中映射的项目.我可以使用Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory.GetTeamProjectCollection()获取所有TFS项目,而不是我可以为workItemStore = new WorkItemStore(项目)做foreach并获取大量项目
我需要找出本地映射的项目或不从代码中映射的项目.我可以使用Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory.GetTeamProjectCollection()获取所有TFS项目,而不是我可以为workItemStore = new WorkItemStore(项目)做foreach并获取大量项目信息,但是像IsMapped或MappingPath这样的东西.
我需要的信息可以从Visual Studio中的Team Explorer的Source Control Explorer轻松访问,但我需要从C#代码中进行访问. 这就是我试过的: var projects = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(_tfsServerUri)); projects.Authenticate(); var workItemStore = new WorkItemStore(projects); foreach (Project pr in workItemStore.Projects) { pr.IsLocal; } UPD:答案 MikeR的答案很好,但我想补充说它有一个缺陷.如果映射了根目录,但实际上并没有本地计算机上此根目录中的所有项目,则Miker的解决方案仍将返回所有项目.如果你不希望你的代码以这种方式行事,这是我的解决方案: TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(_tfsServerUri)); teamProjectCollection.Authenticate(); VersionControlServer versionControl = teamProjectCollection.GetService<VersionControlServer>(); string computerName = Environment.MachineName; WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent(); // get yours local workspaces Workspace[] workspaces = versionControl.QueryWorkspaces(null,windowsIdentity.Name,computerName); foreach (Project pr in workItemStore.Projects) { var mapped = false; foreach (Workspace workspace in workspaces) { var path = workspace.TryGetLocalItemForServerItem("$/" + pr.Name); if (!String.IsNullOrEmpty(path) && Directory.Exists(path)) { mapped = true; } } // do what you want with mapped project } 解决方法
这是一种更通用的方法,但我认为您将设法根据您的需求进行自定义(不编译,只指向方向):
string project = "TeamProject1"; string serverPath = "$/"+project; string computername = "myComputer"; // possibly Environment.Computer or something like that var tpc= TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(_tfsServerUri)); tpc.Authenticate(); // connect to VersionControl VersionControlServer sourceControl = (VersionControlServer)tpc.GetService(typeof(VersionControlServer)); // iterate the local workspaces foreach (Workspace workspace in sourceControl.QueryWorkspaces(null,null,computername)) { // check mapped folders foreach (WorkingFolder folder in workspace.Folders) { // e.g. $/TeamProject1 contains $/ if the root is mapped to local if (serverPath.Contains(folder.ServerItem) && !folder.IsCloaked) { Console.WriteLine(serverPath + " is mapped under "+ folder.LocalItem); Console.WriteLine("Workspacename: "+workspace.Name); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |