如何从外部进程打开Visual Studio中的现有工作项目?

问题描述:

我有一个使用TFS API创建工作项的控制台应用程序。我希望应用程序在创建的工作项打开的情况下启动Visual Studio。我想:如何从外部进程打开Visual Studio中的现有工作项目?

Process.Start("vstfs:///WorkItemTracking/WorkItem/123?url=http://mytfs:8080/tfs/mycollection") 

这将打开Visual Studio的(我有2013 UPDATE3),并打开一个工作项说:“打开工作项目123 ......”,但VS从来没有真正完成这个开放。如果我关闭此窗口,则会收到错误The given key was not present in the dictionary

我从命令行/ devenv的尝试,都让我同样的结果:

C:\> start vstfs:///WorkItemTracking/WorkItem/123?url=http://mytfs:8080/tfs/mycollection 
C:\> "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe" /Tfslink vstfs:///WorkItemTracking/WorkItem/123?url=http://mytfs:8080/tfs/mycollection 

我试图打开另一个TFS项目 - 构建 - 这工作得很好:

C:\> start vstfs:///Build/Build/111?url=http://mytfs:8080/tfs/mycollection 

我可以Open them in Web UI - 但我的用户更喜欢Visual Studio。

那么,如何在VS中启动工作项?

我发现我能够使用ShellExecute()启动加载了所需工作项的TFS。

DECLARE INTEGER ShellExecute ; 
    IN SHELL32.dll ; 
    INTEGER nWinHandle,; 
    STRING cOperation,; 
    STRING cFileName,; 
    STRING cParameters,; 
    STRING cDirectory,; 
    INTEGER nShowWindow 

ShellExecute(0, 'OPEN', "vstfs:///WorkItemTracking/WorkItem/999999?url=http://mytfsserver:8080/tfs/defaultcollection", '', '', 1) 

此代码示例来自VFP,但前提应该是无处不在。

  • 声明功能的Shell32.dll
  • 调用该函数使用正确的参数

下面是如何从命令窗口中的工作项目启动TFS:

START vstfs:///WorkItemTracking/WorkItem/999999?url=http://mytfsserver:8080/tfs/defaultcollection 

您可以创建批处理文件并传入工作项目编号以使其更容易。