如何从外部进程打开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
您可以创建批处理文件并传入工作项目编号以使其更容易。