此答案中提供的下面提供的代码确实有效,但现在它投掷 microsoft.team -foundation.team -foundationserverunauthorizedException:'tf30063:'tf30063:您无权授权访问访问https://{mySite} .visualstudio.com/.'再次。
var credentials = new VssClientCredentials();
credentials.PromptType = CredentialPromptType.PromptIfNeeded;
var teamProjects = new TfsTeamProjectCollection(tfsCollectionUri, credentials);
teamProjects.EnsureAuthenticated(); // exception thrown
q 如何解决此问题?
update 奇怪,
- 在执行
teamProjects.EnsureAuthenticated();
之前,调试器读取PromptIfNeeded
的CC_2。 - 例外之后,调试器停止了执行,它为
DoNotPrompt
读取CC_4。
观察上面的代码在控制台应用程序中非常有效,但无法在Windows表单应用程序中工作(即,它引发了异常)。
Q1 如何使上面的代码在Windows表单应用程序中工作?
如果在Task
中执行上面的代码(即单独的线程),则它只是可行的。如果凭据不存在或在注册表中的位置(请参阅此答案)打开窗口,您可以对自己进行身份验证。
谁能解释为什么这有效?
vs添加了一个注册表条目来存储凭据,请尝试在以下路径中删除该条目:
hkey_current_user software Microsoft vscommon vscommon 14.0 clientervices tokenStorage visualstudio 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();