【问题标题】:Get the Installed TFS Server version from TFS API (Is it 2010 or 2012?)从 TFS API 获取已安装的 TFS 服务器版本(是 2010 还是 2012?)
【发布时间】:2015-07-27 01:15:00
【问题描述】:

我有一个调用 TFS 2010 和 2012 实例的 WCF 服务。我正在寻找一种在 API 中区分 2010 和 2012 的方法,但似乎没有 GetServerVersion() 或类似的 API。

原因是 2010 和 2012 处理工作项链接的方式略有变化:

  • 2010 年工作项目链接:http://TFSUri/web/wi.aspx?id=WorkItemID

  • 2012 年工作项目链接: http://TFSUri/TFSProject/_workitems/edit/WorkItemID

在最坏的情况下,我可以让人们选择他们的版本,但如果可能的话,我真的更喜欢自动区分 2010 年和 2012 年。

【问题讨论】:

    标签: tfs tfs-sdk


    【解决方案1】:

    如果我了解您的用例,另一种方法是使用TswaClientHyperlinkService 来生成您的 URL,这可能比为给定 TFS 版本定义 URL 模式更好。您可以使用此 API 类为给定的工作项 ID 生成 URL,例如,通过 GetWorkItemEditorUrl 方法;例如使用 v11 客户端 dll:

    var collection = new TfsTeamProjectCollection(
                         new Uri("http://<tfsuri>/tfs/<collection>/"));
    
    var hyperlinkService = collection.GetService<TswaClientHyperlinkService>();
    var link = hyperlinkService.GetWorkItemEditorUrl(<workitemid>);
    
    // against TFS 2012:
    // var link: 
    //  http://<tfsuri>/tfs/web/wi.aspx?pcguid=<guid>&id=<workitemid>
    // redirects to 
    //  http://<tfsuri>/tfs/<collection>/<project>/_workitems#_a=edit&id=<workitemid>
    

    我还没有 TFS 2010 实例来测试它,但手指交叉这将在对不同版本的调用中是透明的。


    话虽如此,这个问题一直是asked before。但是已接受答案链接中的方法通过识别每个版本中引入的功能来派生不同的版本。这适用于区分2005、2008和2010。我不知道是否可以使用相同的方法来区分2010和2012(或者现在是否存在更可口的API方法)。

    【讨论】:

    • 谢谢!我开始将它用于超链接,并且能够使其在 2010 年和 2012 年都有效。
    【解决方案2】:

    您可以使用 Build.Client 中的IBuildServer 接口来获取服务器的版本。

    TeamFoundationServer tfs = new TeamFoundationServer(@"http://yourtfs:8080/tfs");
    IBuildServer tfsb = tfs.GetService<IBuildServer>();
    Console.WriteLine(tfsb.BuildServerVersion); //v3 for 2010 and v4 for 2012
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 2013-02-06
      • 1970-01-01
      相关资源
      最近更新 更多