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