msbuild «Невозможно удалить каталог»

Один из наших проектов CruiseControl.NET периодически дает сбой из-за сбоя задачи msbuild с ошибкой

MSB3231: Невозможно удалить каталог «d: \ Somewhere \ Dir \ Admin». Неверный параметр.

Соответствующая строка сценария msbuild просто

<RemoveDir Directories="$(DistributionDir)\Admin" Condition="Exists('$(DistributionDir)\Admin')" />

Когда я смотрю на состояние после неудачной сборки, содержимое каталога было успешно удалено, но сам пустой каталог остался там. И следующая сборка обычно завершается успешно (необходимо удалить только пустой каталог). Обратите внимание, что проблема не похожа на обычную «какой-то другой процесс (например, антивирус) блокирует каталог», ошибка не «отказано в доступе», а очень странное «неверный параметр».

Я наблюдал за сборкой с помощью SysInternals Process Monitor, и результат оказался странным - все идет, как ожидалось, содержимое каталога перечисляется, удаляется, и когда перечисление каталогов верхнего уровня заканчивается на «NO MORE FILES», каталог закрыт, и… ничего. Никакая другая операция не попадает в монитор процесса:

10:04:09,9190557    MSBuild.exe 3516    QueryDirectory  D:\Somewhere\Dir\Admin  NO MORE FILES   
10:04:09,9190928    MSBuild.exe 3516    CloseFile       D:\Somewhere\Dir\Admin  SUCCESS 

Следующая (успешная) попытка сборки - это просто утомительное успешное удаление каталога:

10:31:21,8616463    MSBuild.exe 1760    CreateFile  D:\Somewhere\Dir\Admin  SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
10:31:21,8616861    MSBuild.exe 1760    QueryDirectory  D:\Somewhere\Dir\Admin\*    SUCCESS Filter: *, 1: .
10:31:21,8617305    MSBuild.exe 1760    QueryDirectory  D:\Somewhere\Dir\Admin  SUCCESS 0: ..
10:31:21,8617589    MSBuild.exe 1760    QueryDirectory  D:\Somewhere\Dir\Admin  NO MORE FILES   
10:31:21,8618209    MSBuild.exe 1760    CloseFile   D:\Somewhere\Dir\Admin  SUCCESS 
10:31:21,8621579    MSBuild.exe 1760    CreateFile  D:\Somewhere\Dir\Admin  SUCCESS Desired Access: Read Attributes, Delete, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
10:31:21,8622118    MSBuild.exe 1760    QueryAttributeTagFile   D:\Somewhere\Dir\Admin  SUCCESS Attributes: D, ReparseTag: 0x0
10:31:21,8622408    MSBuild.exe 1760    SetDispositionInformationFile   D:\Somewhere\Dir\Admin  SUCCESS Delete: True
10:31:21,8622676    MSBuild.exe 1760    CloseFile   D:\Somewhere\Dir\Admin  SUCCESS 

Кажется, по какой-то причине MSBuild / Windows обнаруживает некоторую ошибку недопустимого параметра перед удалением каталога выполняется, но я понятия не имею, где искать. (Я также пробовал запустить chkdsk, ничего не найдено.Я также удалил и воссоздал родительский каталог D: \ Somewhere \ Dir, ничего не изменилось.)

Итак - есть идеи, где может быть проблема или как мне следует исследовать дальше?

(Я не уверен, где этот вопрос должен был уйти, это что-то среднее между SO, Progs SE, Server Fault, Superuser…)

11
задан Mormegil 22 September 2011 в 15:58
поделиться