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

本文关键字:文件 用户 TFS 获取 最后一个 | 更新日期: 2023-09-27 18:17:31

基于特定的文件的位置和名称,我想使用 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);
        } 

谢谢你的任何提示

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

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

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();
        }
    }
}

您可以使用IVersionControlStore.QueryHistory()来获取变更集,默认情况下,结果首先返回最近的,并且您可以请求只是顶部'更改,有一个过载也可以获得该变更集的更改

我将添加我发现的,以防它可能会帮助别人(它似乎对我有用)

 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);
    }