加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);
     }
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读