2011-12-14 44 views
3

我想從TFS2010中找出最近使用C#和TFS API檢查的文件,在安裝了MS Visual Studio 2010的情況下工作正常。這是使用VS2010,NET 3.5的開發C#TFS API在VS2008安裝系統中「沒有工作文件夾C: TFS」

當我在系統使用此exe安裝有VS2008拋出錯誤爲 「* 沒有工作文件夾C:\ TFS」。 *

  • 該系統只有3.5框架。
  • 我copi編輯C:\ Program Files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ ReferenceAssemblies \ v2.0中的所有文件以及可執行文件。
  • C:\ TFS是實際的映射文件夾。甚至嘗試了內部文件夾。

請任何建議。 有沒有辦法從TFS得到結果而不考慮本地映射?

TeamFoundationServer tfsServer = new TeamFoundationServer("http://snchndevtfsapp:8080/tfs/defaultcollection"); 
WorkItemStore workItemStore = new WorkItemStore(tfsServer); 
VersionControlServer vcServer = tfsServer.GetService(typeof(VersionControlServer)) as VersionControlServer; 
var usersWorkspaces = vcServer.QueryWorkspaces(null, vcServer.AuthorizedUser, Environment.MachineName).ToList(); 

List<ChangedTFSItem> foundPastChanges = new System.Collections.Generic.List<ChangedTFSItem>(); 

var allPastChangesets = vcServer.QueryHistory(@"C:\TFS", 
               VersionSpec.Latest, 
               0, 
               RecursionType.Full, 
               null, 
               null, 
               null, 
               1000, 
               true, 
               false).Cast<Changeset>(); 
//.Where(x => x.Committer.Contains(Environment.UserName)); 


List<ChangedTFSItem> _foundPastChanges = allPastChangesets 
    .SelectMany(x => x.Changes) 
    .Where(x => x.Item.CheckinDate.Date >= ((DateTime)dateEdit1.EditValue)) 
    //.DistinctBy(x => x.Item.ServerItem, x => x.Item.ServerItem.GetHashCode()) 
    .Select(x => new ChangedTFSItem() 
     { 
      FileName = Path.GetFileName(x.Item.ServerItem), 
      ServerItem = usersWorkspaces[0].GetLocalItemForServerItem(x.Item.ServerItem).Replace(textEdit1.Text, ""), 
      LocalPath = usersWorkspaces[0].GetLocalItemForServerItem(x.Item.ServerItem), 
      ChangeTypeName = x.ChangeType.ToString(), 
      ChangeDate = x.Item.CheckinDate.ToString() 
     }).ToList(); 

回答

4

不是把一個物理路徑,如查詢歷史@"C:\TFS"你的第一個參數,請嘗試使用源控制路徑。如果對所有變更集感興趣,只需放置根"$/"即可。

對於你所要完成的任務,你可以跳過通過做這樣的事情的任何地方工作區連接:

using System; 
using System.Linq; 
using Microsoft.TeamFoundation.Client; 
using Microsoft.TeamFoundation.VersionControl.Client; 

namespace GetFilesOfLatestChangesets 
{ 
    class Program 
    { 
     static void Main() 
     { 
      TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("TFS_URI")); 
      var vcS = teamProjectCollection.GetService(typeof (VersionControlServer)) as VersionControlServer; 
      var changesets = 
       vcS.QueryHistory("$/", VersionSpec.Latest, 0, RecursionType.Full, null, null, null, 10, true, false). 
        Cast<Changeset>(); 
      foreach (var changeset in changesets) 
      { 
       Console.WriteLine("Changes for "+changeset.ChangesetId); 
       foreach (var change in changeset.Changes) 
       { 
        Console.WriteLine(change.Item.ServerItem); 
       } 
      } 
     } 
    } 
} 

但後來你會檢索服務器的路徑進行更改的模塊,而不是他們在那裏已被映射到您的工作站。

最後一句話:您必須使用includeChanges = true查詢歷史記錄,因此要求最後的1000變更集應該相當昂貴。

+0

它的工作原理。謝謝 – 2011-12-14 09:27:26