2011-12-14 26 views
3

TFS2010のC#とTFS APIを使って最近チェックインしたファイルを探したいのですが、MS Visual Studio 2010がインストールされていれば、 。これは、VS2010を使用して開発された私はシステムで、このexeファイルを使用する場合は、 "何の作業フォルダCがありません*:\ TFS" として、.NET 3.5はC#TFS API VS2008がインストールされているシステムにC: TFSというワーキングフォルダがありません

VS2008がインストールされたとすると、エラーがスローされます。 *は

  • このシステムのフレームワークは3.5です。
  • I copi C:¥Program Files¥Microsoft Visual Studio 10.0¥Common7¥IDE¥ReferenceAssemblies¥v2.0のすべてのファイルを実行可能ファイルと共に編集します。
  • C:\ TFSは実際のマッピングフォルダです。インナーフォルダも試してみました。

ご提案ください。 ローカルマッピングを考慮せずにTFSから結果を得る方法はありますか?

TeamFoundationServer tfsServer = new TeamFoundationServer("http://snchndevtfsapp:8080/tfs/defaultcollection"); 
WorkItemStore workItemStore = new WorkItemStore(tfsServer); 
VersionControlServer vcServer = tfsServer.GetService(typeof(VersionControlServer)) as VersionControlServer; 
var usersWorkspaces = vcServer.QueryWorkspaces(null, vcServer.AuthorizedUser, Environment.MachineName).ToList(); 

List<ChangedTFSItem> foundPastChanges = new System.Collections.Generic.List<ChangedTFSItem>(); 

var allPastChangesets = vcServer.QueryHistory(@"C:\TFS", 
               VersionSpec.Latest, 
               0, 
               RecursionType.Full, 
               null, 
               null, 
               null, 
               1000, 
               true, 
               false).Cast<Changeset>(); 
//.Where(x => x.Committer.Contains(Environment.UserName)); 


List<ChangedTFSItem> _foundPastChanges = allPastChangesets 
    .SelectMany(x => x.Changes) 
    .Where(x => x.Item.CheckinDate.Date >= ((DateTime)dateEdit1.EditValue)) 
    //.DistinctBy(x => x.Item.ServerItem, x => x.Item.ServerItem.GetHashCode()) 
    .Select(x => new ChangedTFSItem() 
     { 
      FileName = Path.GetFileName(x.Item.ServerItem), 
      ServerItem = usersWorkspaces[0].GetLocalItemForServerItem(x.Item.ServerItem).Replace(textEdit1.Text, ""), 
      LocalPath = usersWorkspaces[0].GetLocalItemForServerItem(x.Item.ServerItem), 
      ChangeTypeName = x.ChangeType.ToString(), 
      ChangeDate = x.Item.CheckinDate.ToString() 
     }).ToList(); 

答えて

4

代わりのクエリ歴史@"C:\TFS"であなたの最初の引数としての物理パスを配置し、ソース管理パスを使用してみてください。すべてのチェンジセットに興味がある場合は、単にルートを配置してください"$/"

あなたが達成しようとしているタスクの場合、あなたはこのような何か行うことによって任意のローカルワークスペースの接続を省略することができます:

using System; 
using System.Linq; 
using Microsoft.TeamFoundation.Client; 
using Microsoft.TeamFoundation.VersionControl.Client; 

namespace GetFilesOfLatestChangesets 
{ 
    class Program 
    { 
     static void Main() 
     { 
      TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("TFS_URI")); 
      var vcS = teamProjectCollection.GetService(typeof (VersionControlServer)) as VersionControlServer; 
      var changesets = 
       vcS.QueryHistory("$/", VersionSpec.Latest, 0, RecursionType.Full, null, null, null, 10, true, false). 
        Cast<Changeset>(); 
      foreach (var changeset in changesets) 
      { 
       Console.WriteLine("Changes for "+changeset.ChangesetId); 
       foreach (var change in changeset.Changes) 
       { 
        Console.WriteLine(change.Item.ServerItem); 
       } 
      } 
     } 
    } 
} 

をしかし、あなたは「彼らが持っている変更モジュールやないため、サーバーのパスを取得するでしょうワークステーションにマップされています。

最終的な1つの発言:includeChanges = trueのQueryHistoryが必要なので、最後の1000チェンジセットはかなり高価にする必要があります。

+0

です。ありがとう –

関連する問題