我有一个Visual Studio扩展,我们在内部将其用于一个项目,它需要做的一件事情就是给VSTS贴票。以前,我们使用现场TFS,并且连接到票证非常简单:
var vssCreds = new VssCredentials(true);
projectCollection = new TfsTeamProjectCollection(url, vssCreds);
workItems = projectCollection.GetService<WorkItemStore>();
project = workItems.Projects["My Project"];
defaultType = project.WorkItemTypes["Bug"];
//...
var newItem = new WorkItem(defaultType)
{
Title = title
};
newItem.Fields["Assigned To"].Value = assignTo;
newItem.Fields["Repro Steps"].Value = repoSteps;
var validationResult = newItem.Validate();
newItem.Save();
这很好。但是在升级到VSTS之后,我很难让凭证部分起作用。我更改了这一行:
projectCollection = new TfsTeamProjectCollection(url, vssCreds);
对此:
projectCollection = new TfsTeamProjectCollection(url, new VssClientCredentials());
这对我来说很好。但是,当我与团队中的其他人共享它时,它最初并没有工作,然后又开始工作了一段时间。我猜想与VSTS进行交互会导致他们的凭据被加载,从而使其工作。但是我至少有一个人似乎完全无法使其工作。
那么,使用VSTS凭据(在VS中应该已经存在)的正确方法是什么?
我看到
VssClientCredentials
(https://msdn.microsoft.com/en-us/library/dn228355(v=vs.120).aspx)的这种重载:public VssClientCredentials(
IVssCredentialPrompt credentialPrompt
)
我怀疑这可能有用,但是我似乎无法找出某个地方是否有
IVssCredentialPrompt
的内置实现,或者如果没有,该如何实现。 最佳答案
从中删除相关密钥Computer\HKEY_CURRENT_USER\Software\Microsoft\VSCommon\14.0\ClientServices\TokenStorage\VisualStudio\VssApp
,然后再次进行身份验证。
您还可以使用以下代码指定其他种类(默认情况下为vssApp)和命名空间(默认情况下为VisualStudio):
var c = new VssClientCredentials();
c.Storage = new VssClientCredentialStorage(storageKind: "VssApp2", storageNamespace: "VisualStudio");
projectCollection = new TfsTeamProjectCollection(url, c);
关于c# - 如何在VSIX扩展中处理VSTS凭据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49197227/