我们最近升级到VS 2017和Visual Studio Team Services。
我们有一套自动化工具,可以代表开发人员执行各种与源代码管理相关的任务。
某些用户和一个服务帐户似乎在某处缓存了凭据,并且在运行工具时不会提示您输入凭据。
但是,会提示其他用户提供凭据。
我创建了一个迷你测试应用来说明问题。注意:VSTS dll是VS2017 Team Explorer安装文件夹中的15.x版文件。如果您不介意膨胀,它们也可作为Microsoft.TeamFoundationServer.ExtendedClient NuGet包的一部分提供。
using System;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;
namespace VSTSTest
{
class Program
{
static void Main(string[] args)
{
try
{
if (args.Length > 0)
{
var projectCollectionUrl = args[0];
var projectCollection = new TfsTeamProjectCollection(new Uri(projectCollectionUrl));
var versionControlServer = (VersionControlServer)projectCollection.GetService(typeof(VersionControlServer));
Console.WriteLine("AuthorizedUser: {0}", versionControlServer.AuthorizedUser);
}
Console.WriteLine("Usage is {projectCollectionUrl}");
}
catch (Exception e)
{
Console.WriteLine(e);
}
Console.ReadLine();
}
}
}
这适用于某些用户,但不适用于其他用户,我试图找出原因。
答案 0 :(得分:1)
检查此注册表路径:HKEY_CURRENT_USER\Software\Microsoft\VSCommon\14.0\ClientServices\TokenStorage\VisualStudio\VssApp
(在VS2017中测试,它也存储在14.0中)
您也可以查看凭据管理器。
另一方面,您可以更改存储密钥:
var c = new VssClientCredentials();
c.Storage = new VssClientCredentialStorage(storageKind: "VssApp2", storageNamespace: "VisualStudio");
TfsTeamProjectCollection _tfs = new TfsTeamProjectCollection(u, c);