Итак, я пытаюсь получить файлы из рабочей области в 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 нормально.
Edit2:
Хорошо, я читал через MSDN и заметил, что именем рабочей области может быть локальный путь к файлам. Поэтому я изменил то, что передал в качестве параметра workspaceName
, в локальный каталог файлов. Я все еще получаю киоски, но в файле журнала гораздо менее понятно, почему. Я загрузил файл tf.log здесь (я, очевидно, изменил конфиденциальную информацию, такую как имена серверов и проектов, но все остальное осталось нетронутым). После этой последней записи в журнал дальнейшие данные не записываются в журнал.