2011-12-14 43 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