【发布时间】:2017-12-23 05:01:15
【问题描述】:
我正在升级一个与 TFS/VSTS 对话的 C# 应用程序以使用最新的 TeamFoundation sdk。
我想连接并让应用提示输入凭据,就像使用 Visual Studio 连接到 TFS 时一样。
我从 nuget.org 下载了最新的稳定版 VSTS Api:
microsoft.teamfoundationserver.extendedclient.15.112.1.nupkg
我还从我的 VS2017 安装中引用了它使用的程序集,这里:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer.
我尝试了多种组合,但无法提示。我当前的代码如下所示:
static void Main(string[] args)
{
try
{
var netCred = new NetworkCredential();
var basicCred = new VssBasicCredential(netCred);
var vssCred = new VssCredentials(basicCred);
vssCred.PromptType = CredentialPromptType.PromptIfNeeded;
var server = new TfsTeamProjectCollection(new Uri(serverName), vssCred);
server.Authenticate();
}
catch( Exception ex )
{
System.Console.WriteLine(ex.ToString());
}
System.Console.ReadKey();
}
不提示,而是输出这个异常:
Microsoft.TeamFoundation.TeamFoundationServerUnauthorizedException: TF30063: 您无权访问 https://.visualstudio.com/。 ---> System.Net.WebException: 远程服务器返回错误:(401)未经授权。在 System.Net.HttpWebRequest.GetResponse() 在 Microsoft.TeamFoundation.Client.Channels.TfsHttpWebRequest.SendRequestAndGetResponse(HttpWebRequest webRequest, WebException& webException) --- 内部异常结束 堆栈跟踪 --- 在 Microsoft.TeamFoundation.Client.Channels.TfsHttpWebRequest.SendRequest() 在 Microsoft.TeamFoundation.Client.Channels.TfsHttpRequestChannel.Request(TfsMessage 消息,TimeSpan 超时)在 Microsoft.TeamFoundation.Client.Channels.TfsHttpClientBase.Invoke(TfsClientOperation 操作、Object[] 参数、TimeSpan 超时、Object[]& 输出)
在 Microsoft.TeamFoundation.Framework.Client.LocationWebService.Connect(Int32 connectOptions,Int32 lastChangeId,Int32 功能)在 Microsoft.TeamFoundation.Framework.Client.FrameworkServerDataProvider.Connect(ConnectOptions 连接选项)在 Microsoft.TeamFoundation.Framework.Client.FrameworkServerDataProvider.Authenticate() 在 Microsoft.TeamFoundation.Client.TfsConnection.Authenticate() 在 VstsAuthTest.Program.Main(String[] args) 在 S:\VstsAuthTest\Program.cs:第 26 行
如何让它提示和缓存凭据?
我使用的旧版本的 TeamFoundation sdk dll 似乎可以正常工作。我升级的原因是因为 C# 应用程序在安装在只有 VS2017 而不是 VS2015 的机器上时似乎拒绝连接到 TFS。我希望升级到最新的 SDK dll 可能有助于解决连接问题。
我见过这个,但它似乎已经过时并且使用了现在已弃用的类。这也是关于没有提示的连接,但 cmets 包含一些关于如何获得提示的讨论。
我还看到了这些最近出现的示例,但也使用了已弃用的 api。
https://www.visualstudio.com/en-us/docs/integrate/get-started/client-libraries/samples
【问题讨论】:
-
您应该切换到引用 VSTS/TFS API SDK 的 NuGet 包并将 dll 打包到您的产品中。不再支持依赖 Visual Studio 安装。
标签: tfs azure-devops azure-devops-rest-api