我正在开发一个VS 2015扩展,它应该连接到VSTS(VisualStudio.com)并提取积压项目。
以下代码适用于控制台应用,但不适用于VSIX项目。我从团队菜单(IDM_MENU_TEAM_FOUNDATION_CLIENT
)中的菜单项调用它。
using Microsoft.VisualStudio.Services.Client;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
...
public WorkItem GetItems(int itemId) {
var myCredentials = new VssClientCredentials();
var vstsConnection = new VssConnection(new Uri(@"https://myaccount.visualstudio.com/"), myCredentials);
var vstsClient = vstsConnection.GetClient<WorkItemTrackingHttpClient>();
var workItem = vstsClient.GetWorkItemAsync(itemId).Result;
return workItem;
}
我认为问题在于控制台应用可以在没有任何问题的情况下调用登录屏幕。运行VSIX代码的VS 2015实验实例没有。到目前为止,我的研究并没有指出任何有用的东西。
是否有正确的方法从Visual Studio Extension连接到VSTS?我错过了什么?
答案 0 :(得分:1)
像这样修改你的代码:
private void GetWorkItem(object sender, EventArgs e)
{
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
var w = GetItems(123);
MessageBox.Show(w.Url);
});
}
public WorkItem GetItems(int itemId)
{
var myCredentials = new VssClientCredentials();
var vstsConnection = new VssConnection(new Uri(@"https://xxx.visualstudio.com/"), myCredentials);
var vstsClient = vstsConnection.GetClient<WorkItemTrackingHttpClient>();
var workItem = vstsClient.GetWorkItemAsync(itemId).Result;
return workItem;
}