2

我有一个调用 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。

4

2 回答 2

3

如果我了解您的用例,另一种方法,可以说比为给定的 TFS 版本定义 URL 模式更好的方法是使用TswaClientHyperlinkService来生成您的 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 实例来测试它,但手指交叉这将在对不同版本的调用中是透明的。


说了这么多,这个问题之前有人问过。但是已接受答案链接中的方法通过识别每个版本中引入的功能来派生不同的版本。这适用于区分 2005、2008 和 2010。我不知道是否可以使用相同的方法来区分 2010 和 2012(或者现在是否存在更可口的 API 方法)。

于 2013-02-20T01:42:49.543 回答
1

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

TeamFoundationServer tfs = new TeamFoundationServer(@"http://yourtfs:8080/tfs");
IBuildServer tfsb = tfs.GetService<IBuildServer>();
Console.WriteLine(tfsb.BuildServerVersion); //v3 for 2010 and v4 for 2012
于 2013-02-20T12:43:13.167 回答