C#TFS API“VS2008安装系统中没有工作文件夹C:\ TFS”

时间:2011-12-14 05:18:13

标签: c# tfs2010 tfs2008 tfs-sdk

我想找出最近使用TFS2010的C#和TFS API检查过的文件。在安装MS Visual Studio 2010的地方工作正常。这是使用VS2010,.Net 3.5开发的。

当我在安装了VS2008的系统中使用此exe时,抛出错误为“* 没有工作文件夹C:\ TFS * 。

  • 此系统只有3.5 Framework。
  • 我复制了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();

1 个答案:

答案 0 :(得分: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来查询QueryHistory,因此要求最后1000个更改集应该相当昂贵。