2013-07-19 4 views
5

मुझे पता लगाना है कि परियोजना स्थानीय रूप से मैप की गई है या कोड से नहीं। मैं Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory.GetTeamProjectCollection() का उपयोग कर Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory.GetTeamProjectCollection() का उपयोग कर सभी टीएफएस प्रोजेक्ट प्राप्त कर सकता हूं, workItemStore = new WorkItemStore(projects) के लिए foreach कर सकता हूं और बहुत सारी परियोजना जानकारी प्राप्त कर सकता हूं लेकिन IsMapped या MappingPath जैसे कुछ भी प्राप्त कर सकते हैं।टीएफएस में मैप किए गए प्रोजेक्ट को प्रोग्रामेटिक रूप से चेक किया गया है?

मुझे जो जानकारी चाहिए वह विजुअल स्टूडियो में टीम एक्सप्लोरर के स्रोत नियंत्रण एक्सप्लोरर से आसानी से पहुंचा जा सकता है, लेकिन मुझे इसे सी # कोड से करना होगा।

है यही कारण है कि मैं क्या करने की कोशिश की:

var projects = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(_tfsServerUri)); 
projects.Authenticate(); 
var workItemStore = new WorkItemStore(projects); 
foreach (Project pr in workItemStore.Projects) 
    { 
     pr.IsLocal; 
    } 

युपीडी: उत्तर

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 
    } 

उत्तर

3

यह और अधिक एक सामान्य दृष्टिकोण है, लेकिन मैं आपको, अपनी आवश्यकताओं (के लिए यह अनुकूलित करने के लिए संकलित नहीं प्रबंधन करेगा सिर्फ इशारा करते हुए लगता है: यदि आप अपने कोड इस तरह से कार्य करने के लिए नहीं करना चाहते हैं, तो यहाँ मेरी समाधान है दिशा में):

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); 
    } 
    } 
} 
संबंधित मुद्दे

 संबंधित मुद्दे