2

TFS2010と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 クラスを使用して、たとえばGetWorkItemEditorUrlメソッドを通じて、特定の作業項目 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 インスタンスはありませんが、指を交差させれば、異なるバージョンへの呼び出し間で透過的になります。


そうは言っても、この質問は以前に尋ねられました。ただし、受け入れられた回答のリンクの方法は、各リリースで導入された機能を識別することにより、異なるバージョンを導き出します。これは、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 に答える