そのため、TFS のワークスペースからファイルを取得しようとしています。残念ながら、私がこれを試みたすべての試みは、アプリケーションの停止という結果に終わりました。現時点では、これはコードです:
public void GetWorkspaceFiles(string workspaceName)
{
VersionControlServer sourceControl = (VersionControlServer)TfsServer.GetService(typeof(VersionControlServer));
var items = sourceControl.GetItems(workspaceName, VersionSpec.Latest, RecursionType.Full)
.Items
.Where(x => x.ItemType == ItemType.File)
.ToList();
for (int x = 0; x < items.Count; x++)
items[x].DownloadFile();
何が起こるかというと、このアプリケーションを (複数のマシンで) 実行するたびに、 で停止しitems[x].DownloadFile()
ます。TFS 内のすべてのファイルはロックされていません。すべて問題ありません。メソッドを使用しようとしてもWorkspace.Get()
、同じ結果になります。
一時停止を押すと、x は特定の値になりますが、アイテム コレクションにアクセスできません。たとえば、「現在のスレッドがスリープ、待機、または結合中であるため、式を評価できません」というメッセージが表示されます。コールスタックを評価すると、次のようになります。
[In a sleep, wait, or join]
[External Code]
GetWorkspaceFiles(string workspaceName) Line 55
私はさらに何をすべきか途方に暮れています。アプリケーションを一時停止するたびに、x
常に同じ値になります (停止する値は、アプリケーションの実行ごとに異なります)。
誰にもアイデアはありますか?
編集:診断ロジックを追加した後(グラントの回答のリンクに基づいて)、これまで以上に混乱しています。
このメソッドに渡すワークスペースは$/QA/Automated Test Scripts/Regression or System Test Scripts/RDE or Condo
(デバッガーで検証済み) です。
ただし、tfs ログを見ると、次のように、実行中のコード ファイルをダウンロードしているように見えます。
02/10/2011 12:26:58 (pid 5808, tid 5968, 42180 ms) Recording OperationStatus.Getting for $/QA/Automated Test Scripts/QA Tools/Test Manager/Test Polling Server/fmMain.cs
そのエントリの直後は次のとおりです。
02/10/2011 12:26:58 (pid 5808, tid 5968, 42180 ms) DownloadFiles: 18 ms
02/10/2011 12:26:58 (pid 5808, tid 5968, 42181 ms) Acknowledgements: 0 ms
その後、ログ ファイルは更新されず、アプリケーションは停止します。私が混乱しているのは
1) 完全に異なる TFS ワークスペースを指定しているときに、これが TFS からアプリケーション コードをプルしようとするのはなぜですか?
2) ファイルを取得しようとした後、なぜこれが停止するのですか? が Visual Studio で開いていることが原因である可能性がfmMain.cs
ありますが、それでも例外が発生し、ハングアップすることはありません。通常、ビジュアルスタジオでファイルを開いている間に最新のものを取得できます。
編集2:
わかりましたので、MSDN を読んでいて、ワークスペース名がファイルへのローカル パスであることに気付きました。workspaceName
そのため、ファイルのローカル ディレクトリへのパラメーターとして渡したものを変更しました。それでもストールが発生しますが、ログ ファイルにはその理由があまり明確ではありません。ここに tf.log ファイルをアップロードしました(サーバー名やプロジェクト名などの機密情報は明らかに変更しましたが、それ以外はすべて変更していません)。その最後のログ エントリの後、それ以上のデータはログに書き込まれません。