C#TFS获取更改特定文件的最后一个用户

C#TFS获取更改特定文件的最后一个用户,c#,tfs,C#,Tfs,基于一个特定的文件的位置和名称,我想使用C#以编程方式获取最后一个用户的名称,该用户将在TFS中更改此文件。(最好有最后一个变更日期) 虽然没有直接关系,但作为上下文信息,我使用以下内容根据文件的本地路径从TFS获取最新信息: var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(LocalPath); using (var server = new TfsTeamProjectCollecti

基于一个特定的文件的位置和名称,我想使用C#以编程方式获取最后一个用户的名称,该用户将在TFS中更改此文件。(最好有最后一个变更日期)

虽然没有直接关系,但作为上下文信息,我使用以下内容根据文件的本地路径从TFS获取最新信息:

        var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(LocalPath);
        using (var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri))
        {
            var workspace = workspaceInfo.GetWorkspace(server);
            GetRequest request = new GetRequest(new ItemSpec(LocalPath, RecursionType.Full), VersionSpec.Latest);
            workspace.Get(request, GetOptions.Overwrite);
        } 

感谢您提供的任何提示

您可以使用这些提示来获取变更集,默认情况下,结果首先返回最新的结果,您可以只请求最上面的`变更,还有一个重载来获取该变更集中的变更。

我创建了一个简单的代码供您参考:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Build.Client;
using Microsoft.TeamFoundation.VersionControl.Client;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string tfsurl = "http://tfscollectionurl";
            TfsTeamProjectCollection ttpc = new TfsTeamProjectCollection(new Uri(tfsurl));
            VersionControlServer vcs = ttpc.GetService<VersionControlServer>();
            string[] path = { "$/Path/To/Item.cs" };
            ItemSpec[] itemSpecs = ItemSpec.FromStrings(path, RecursionType.Full);
            ItemSpec itemSpec = itemSpecs.Cast<ItemSpec>().First();
            IEnumerable<Changeset> changesets = vcs.QueryHistory(itemSpec);
            Changeset latestchangeset = changesets.Cast<Changeset>().First();
            Console.WriteLine(latestchangeset.Committer);
            Console.WriteLine(latestchangeset.CommitterDisplayName);
            Console.WriteLine(latestchangeset.Owner);
            Console.WriteLine(latestchangeset.OwnerDisplayName);
            Console.WriteLine(latestchangeset.CreationDate);
            Console.ReadLine();
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用Microsoft.TeamFoundation.Client;
使用Microsoft.TeamFoundation.Build.Client;
使用Microsoft.TeamFoundation.VersionControl.Client;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串tfsurl=”http://tfscollectionurl";
TfsTeamProjectCollection ttpc=新的TfsTeamProjectCollection(新Uri(tfsurl));
VersionControlServer vcs=ttpc.GetService();
字符串[]路径={“$/path/To/Item.cs”};
ItemSpec[]itemSpecs=ItemSpec.FromStrings(路径,RecursionType.Full);
ItemSpec ItemSpec=itemSpecs.Cast().First();
IEnumerable changesets=vcs.QueryHistory(itemSpec);
Changeset latestchangeset=changesets.Cast().First();
Console.WriteLine(最新的changeset.Committer);
Console.WriteLine(latestchangeset.CommitterDisplayName);
Console.WriteLine(latestchangeset.Owner);
Console.WriteLine(latestchangeset.OwnerDisplayName);
Console.WriteLine(最新的changeset.CreationDate);
Console.ReadLine();
}
}
}

我将添加我发现的内容,以防对其他人有所帮助(它似乎对我有用)

var workspaceInfo=Workstation.Current.GetLocalWorkspaceInfo(modifiedPath);
TfsTeamProjectCollection tpc=新的TfsTeamProjectCollection(workspaceInfo.ServerUri);
VersionControlServer vcServer=tpc.GetService();
使用(var server=new-tfstreamprojectcollection(workspaceInfo.ServerUri))
{
var workspace=workspaceInfo.GetWorkspace(服务器);
QueryHistoryParameters historyParams=新的QueryHistoryParameters(modifiedPath,RecursionType.Full);
historyParams.MaxResults=1;
Changeset Changeset=vcServer.QueryHistory(historyParams.FirstOrDefault();
字符串user=changeset.committer显示名称;
MessageBox.Show(用户);
}

非常感谢Eddie和DaveShaw。
 var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(modifiedPath);

    TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(workspaceInfo.ServerUri);
    VersionControlServer vcServer = tpc.GetService<VersionControlServer>();


    using (var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri))
    {
        var workspace = workspaceInfo.GetWorkspace(server);

        QueryHistoryParameters historyParams = new QueryHistoryParameters(modifiedPath, RecursionType.Full);

        historyParams.MaxResults = 1;

        Changeset changeset = vcServer.QueryHistory(historyParams).FirstOrDefault();

        string theUser = changeset.CommitterDisplayName;

        MessageBox.Show(theUser);
    }