我们的一个CruiseControl.NET项目出现了间歇性失败的情况,因为一项msbuild任务失败并显示以下错误:
error 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 之间...)