我有一个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中应该已经存在)的正确方法是什么?

我看到VssClientCredentialshttps://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/

10-15 06:36