TF30063:您未获得授权...编程访问无效

TF30063: You are not authorized ... programmatic access not working

中提供的以下代码在一段时间内确实运行良好,但现在它再次抛出 Microsoft.TeamFoundation.TeamFoundationServerUnauthorizedException: 'TF30063: You are not authorized to access https://{mysite}.visualstudio.com/.'

var credentials = new VssClientCredentials();
credentials.PromptType = CredentialPromptType.PromptIfNeeded;

var teamProjects = new TfsTeamProjectCollection(tfsCollectionUri, credentials);
teamProjects.EnsureAuthenticated();         // exception thrown

我该如何解决这个问题?

更新奇怪了,

  1. 在执行 teamProjects.EnsureAuthenticated(); 之前,调试器读取 PromptIfNeeded for credentials.PromptType
  2. 在抛出异常并且调试器停止执行后,它读取 DoNotPrompt for credentials.PromptType

观察 上面的代码在控制台应用程序中运行良好,但在 windows 表单应用程序中无法运行(即抛出异常)。

Q1 如何让上述代码在 windows 表单应用程序中工作?

VS添加了一个注册表条目来存储凭据,尝试删除以下路径中的条目:

HKEY_CURRENT_USER\Software\Microsoft\VSCommon.0\ClientServices\TokenStorage\VisualStudio\VssApp

更新:

另外,试试下面的代码看看是否有效:

 var credentials = new VssClientCredentials();
 credentials.PromptType = CredentialPromptType.PromptIfNeeded;
 credentials.Storage = new VssClientCredentialStorage(storageKind: "VssApp2", storageNamespace: "VisualStudio");
 var aTeamProjects = new TfsTeamProjectCollection(new Uri("https://xxxxx.visualstudio.com/"), credentials);
 aTeamProjects.EnsureAuthenticated();

如果您在 Task(即一个单独的线程)中执行上面的代码,它就可以正常工作。如果凭据在注册表中的位置不存在或过时(请参阅此 ),则会打开 window,您可以对自己进行身份验证。

任何人都可以解释为什么这样做吗?