0

TFS で特定のプロジェクトの変更セットを取得する TFS ユーティリティに取り組んでいます。私は主にテストに使用するホーム TFS 2010 サーバーを持っていますが、私が貢献している codeplex プロジェクトに対して試してみることにしました。そうすれば、ローカルにあるよりも多くの変更セットに対して機能をテストできます。

私の環境では問題なく動作しますが、コードプレックスに有線で接続すると、困惑してしまいます。私のアプリケーションは履歴を照会しますが、履歴を繰り返し処理しようとすると (IEnumerable を遅延ロードするとき)、アプリケーションがハングします。

Intellitrace を見ると、「アイテムが指定されたバージョンに存在しない」という「最初のチャンス」の例外がいくつか見られます。これは、VersionSpec で「$/」の履歴を取得しようとしているため、明らかに真実ではありません。 。最新。

また、デバッグを強制的に一時停止した後、サーバー 500 エラーが 2 回または 3 回連続して返されます。

他の操作( などGetItems())は正常に機能するため、認証は問題ではないと確信しています。

何かご意見は?

コードは次のとおりです。

IEnumerable items = vcs.QueryHistory("$/", VersionSpec.Latest, 1, RecursionType.None, null, null, null, 5, true, false);

        List<ChangesetItem> returnList = new List<ChangesetItem>();
        foreach (Changeset cs in items)  //hangs here on first iteraiton
        {
            ChangesetItem newItem = new ChangesetItem()
            {
                ChangesetId = cs.ChangesetId,
                //ChangesetNote = cs.CheckinNote.Values[0].Value,
                Comment = cs.Comment,
                Committer = cs.Committer,
                CreationDate = cs.CreationDate
            };

            returnList.Add(newItem);
        }
4

1 に答える 1

0

どっ!それを見つけた。問題は私の QueryHistory 呼び出しにありました:

IEnumerable items = vcs.QueryHistory("$/", 
                  VersionSpec.Latest, 
                  1, // the deletionId should be '0' or a unique deletion identifier
                  RecursionType.None, 
                  null, 
                  null, 
                  null, 
                  5, 
                  true, 
                  false);

上記のコード行にコメントしました。何らかの理由で、deletionId は '1' であるはずだと思っていましたが、API を調べたところ、ゼロ (既存のファイルの場合) またはファイルの特定の削除 ID であることがわかりました。削除されたもの。どうやら、API は削除 ID が「1」のファイルを探していたようですが、それが見つからなかったため、クラッシュが発生しました。

于 2010-06-18T00:30:55.320 に答える