所以我试图从 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)为什么在尝试检索文件后会停止?这可能是因为它fmMain.cs
在 Visual Studio 中打开,但它仍然应该出现异常并且不会挂断。当文件通过visual studio正常打开时,我可以获得最新的。
编辑2:
好的,所以我正在阅读 MSDN,我注意到工作区名称可以是文件的本地路径。所以我修改了我作为workspaceName
参数传入的文件的本地目录。我仍然会遇到问题,但日志文件中的原因却不太清楚。我已经在此处上传了 tf.log 文件(我显然更改了专有信息,例如服务器和项目名称,但其他所有内容都保持不变)。在最后一个日志条目之后,不再向日志写入数据。