3

TFS2010 から C# および TFS API を使用して最近チェックインされたファイルを見つけたいです。MS Visual studio 2010 がインストールされている場所では問題なく動作します。これは、VS2010、.Net 3.5 を使用して開発されています。

VS2008 がインストールされているシステムでこの exe を使用すると、"* There is no working folder C:\TFS " * というエラーがスローされます。

  • このシステムには 3.5 フレームワークしかありません。
  • 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

1 に答える 1

4

Query History の最初の引数として物理パスを配置する代わりに@"C:\TFS"、ソース管理パスを使用してみてください。すべての変更セットに関心がある場合は、単純に root を配置し"$/"ます。

達成しようとしているタスクについては、次のようにして、ローカル ワークスペース接続をスキップできます。

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 つ: =

を使用して QueryHistory を実行する必要があるため、最後の変更セットを要求するのはかなりコストがかかるはずです。includeChangestrue1000

于 2011-12-14T08:29:56.153 に答える