Один из наших проектов 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…)