从 vs 2017 以编程方式连接到 TFS

Posted

技术标签:

【中文标题】从 vs 2017 以编程方式连接到 TFS【英文标题】:Connect to TFS programmatically from vs 2017 【发布时间】:2019-06-11 12:24:25 【问题描述】:

我正在使用TFS 15.x. package

错误:

Microsoft.TeamFoundation.TeamFoundationServerUnauthorizedException: 'TF30063: 您无权访问 "https://myproject.visualstudio.com/RpaCodeReview'

Uri Repurl = new Uri("https://myproject.visualstudio.com/RpaCodeReview");
NetworkCredential netCred = new NetworkCredential(username, password);
VssBasicCredential basicCred = new VssBasicCredential(netCred);
VssCredentials tfsCred = new VssCredentials(basicCred);
TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(Repurl, tfsCred);
tpc.EnsureAuthenticated();

【问题讨论】:

也许你“没有被授权访问”tfs? 我有这个项目的授权 我也有这个问题,最终我转而使用 TFS rest apis 与 tfs 进行通信,当他们发布它们时,因为我在升级 tfs 时维护正确的库版本没有问题。如果你想告诉我,我会发布初学者的方法。 你能分享我使用 tfs apis 的代码吗? REST API 非常易于使用。这是 VS2017 的documentation。这是一个 example 用于将新构建放入队列中。 【参考方案1】:

这取决于您的 TFS 版本。但是,如果您尝试连接到 TFS2015 或 TFS2017,则可以这样做;

using Microsoft.TeamFoundation.Client;
using Microsoft.VisualStudio.Services.Common;
using System;
using System.Net;   

namespace TFSConsoleApp

    class Program
    
        static void Main(string[] args)
        
            NetworkCredential networkCredentials = new NetworkCredential(@"Domain\Account", @"Password");
            Microsoft.VisualStudio.Services.Common.WindowsCredential windowsCredentials = new Microsoft.VisualStudio.Services.Common.WindowsCredential(networkCredentials);
            VssCredentials basicCredentials = new VssCredentials(windowsCredentials);
            TfsTeamProjectCollection tfsColl = new TfsTeamProjectCollection(
                new Uri("http://XXX:8080/tfs/DefaultCollection"),
                basicCredentials);

            tfsColl.Authenticate(); // make sure it is authenticate
        
    

我不能强调确保凭据是好的!这个错误我也发生过几次。

如果上述方法不起作用,还有另一种解决方案。

    关闭 Visual Studio 并转到控制面板 用户帐户 --> 管理您的凭据(在左列) 选择“Windows 凭据” 向下滚动到“通用凭据”部分并查找 您的 TFS 服务器连接 展开下拉菜单并点击“编辑” 输入您的网络密码 重新启动 Visual Studio 并重试代码

【讨论】:

这是使用 Windows 凭据的权利。我可以使用 Microsoft 凭据吗? 当您进入通用凭据并找到您的 TFS 连接时,只需编辑并重新输入您的密码。它应该是您用于 TFS 的密码 如果这不起作用,请尝试删除您的 TFS 凭据并重新添加它。告诉我进展如何 您可以尝试将管理员凭据放入您的程序中,看看是否仍然出现相同的错误? 它现在可以工作了。我更改了 Microsoft 帐户中的凭据。谢谢【参考方案2】:

除了凭据上的所有 cmets,我还发现一些存储库中的基本身份验证被阻止。

我发现最好在存储库中创建个人访问令牌 (PAT)。然后在您的连接中使用它来访问 API。

读取 tfs/devops 存储库默认集合中的项目的示例:

string PAT = "Put PAT String Here";
string RepoStore = "https://url of repo here";
string responseBody = "";

using (HttpClient client = new HttpClient())

    client.DefaultRequestHeaders.Accept.Add(
        new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
        Convert.ToBase64String(
            System.Text.ASCIIEncoding.ASCII.GetBytes(
                string.Format("0:1", "", PAT))));

    using (HttpResponseMessage response = client.GetAsync(
                RepoStore + "/_apis/projects").Result)
    
        response.EnsureSuccessStatusCode();
        responseBody = await response.Content.ReadAsStringAsync();
    
    Console.WriteLine(responseBody);


Console.ReadKey();

【讨论】:

以上是关于从 vs 2017 以编程方式连接到 TFS的主要内容,如果未能解决你的问题,请参考以下文章

无法将vs2008连接到tfs2013

以编程方式连接到蓝牙

以编程方式将设备连接到android中的同一wifi网络?

如何在脱机时以编程方式确定本地文件是不是受 TFS 版本控制

VS 2015 无法连接到 tfs

在 Nodejs 中以编程方式连接到 Mongodb Amazon EC2 实例