私は、プロジェクトがローカルにマッピングされているかどうか、コードからは分かりません。私はMicrosoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory.GetTeamProjectCollection()
を使ってすべてのTFSプロジェクトを得ることができます。foreach
をworkItemStore = new WorkItemStore(projects)
にして、多くのプロジェクト情報を取得できますが、IsMapped
またはMappingPath
のようなものがあります。プログラムでTFSでマッピングされたプロジェクトがどのようにチェックされていますか?
情報Visual Studioの[チームエクスプローラ]の[ソースコントロールエクスプローラ]から簡単にアクセスできますが、C#コードから実行する必要があります。私が試したものです
:
UPD:ANSWER
MikeRの答えは良いですが、私はそれが1欠陥を持っていることを追加したいです。ルートディレクトリがマップされているにもかかわらず、ローカルコンピュータのこのルートディレクトリからすべてのプロジェクトを実際に取得していない場合、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
}