2013-02-19 67 views
2

我有一個調用TFS 2010和2012實例的WCF服務。我正在尋找一種方法來區分2010年和2012年的API,但似乎沒有GetServerVersion()或類似的API。從TFS API獲取已安裝的TFS服務器版本(是2010年還是2012年?)

的原因是,有在這樣的細微變化,2010年和2012年處理工作項目鏈接:

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

  • 在2012年工作項目鏈接: http://TFSUri/TFSProject/_workitems/edit/WorkItemID

最壞的情況我可以讓人們選擇他們的版本,但我真的很喜歡如果可能,自動區分2010年和2012年。

回答

1

您可以使用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 
+0

謝謝!這工作完美 – ChrisG 2013-02-28 23:13:19

+0

我實現了這個https://github.com/camilin87/tfsversion – 2014-06-19 19:15:17

3

提供我瞭解您的使用案例替代方案,並且可以說比爲給定的TFS版本定義URL模式更好的方法是使用TswaClientHyperlinkService來生成您的URL。例如,通過GetWorkItemEditorUrl方法,您可以使用此API類爲給定的工作項Id生成URL;例如使用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方法)。

+0

謝謝!我開始使用這個超鏈接,並且能夠使它在2010年和2012年都能正常工作。 – ChrisG 2013-02-28 23:14:04

相關問題