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
问我该如何解决这个问题?
更新奇怪了,
- 在执行
teamProjects.EnsureAuthenticated();
之前,调试器读取 PromptIfNeeded
for credentials.PromptType
。
- 在抛出异常并且调试器停止执行后,它读取
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,您可以对自己进行身份验证。
任何人都可以解释为什么这样做吗?
此
var credentials = new VssClientCredentials();
credentials.PromptType = CredentialPromptType.PromptIfNeeded;
var teamProjects = new TfsTeamProjectCollection(tfsCollectionUri, credentials);
teamProjects.EnsureAuthenticated(); // exception thrown
问我该如何解决这个问题?
更新奇怪了,
- 在执行
teamProjects.EnsureAuthenticated();
之前,调试器读取PromptIfNeeded
forcredentials.PromptType
。 - 在抛出异常并且调试器停止执行后,它读取
DoNotPrompt
forcredentials.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
(即一个单独的线程)中执行上面的代码,它就可以正常工作。如果凭据在注册表中的位置不存在或过时(请参阅此
任何人都可以解释为什么这样做吗?