msbuild“;无法删除目录”;
我们的一个CruiseControl.NET项目持续间歇性失败,因为msbuild任务在以下情况下失败: 错误MSB3231:无法删除目录“d:\Somewhere\Dir\Admin”。参数不正确 对应的msbuild脚本行仅为msbuild“;无法删除目录”;,msbuild,cruisecontrol.net,Msbuild,Cruisecontrol.net,我们的一个CruiseControl.NET项目持续间歇性失败,因为msbuild任务在以下情况下失败: 错误MSB3231:无法删除目录“d:\Somewhere\Dir\Admin”。参数不正确 对应的msbuild脚本行仅为 <RemoveDir Directories="$(DistributionDir)\Admin" Condition="Exists('$(DistributionDir)\Admin')" /> 下一次(成功的)构建尝试只是一次令人厌烦的成功目录删除
<RemoveDir Directories="$(DistributionDir)\Admin" Condition="Exists('$(DistributionDir)\Admin')" />
下一次(成功的)构建尝试只是一次令人厌烦的成功目录删除:
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目录,没有任何更改。)
那么,你知道问题可能在哪里,或者我应该如何进一步调查吗
(我不确定这个问题应该到哪里去,它介于程序、服务器故障、超级用户之间……)我不知道为什么会失败,但是如果文件夹是唯一剩下的东西,构建能否正确完成?如果是这样的话,一个解决方法是指定ContinueOnError=“True”。这可能有点晚了,但我发现了相同的错误,问题似乎在Exists条件下。对条件的评估似乎无法释放与任务执行冲突的目录。
通过删除条件,如果目录存在,将删除目录,但如果目录不存在,则语句不会失败:
尝试了很多方法,但我不明白为什么当目录不是空的时候,这种方法有时会失败;在我们的例子中,目录包含符号链接(如果这很重要的话)。无论如何,我不喜欢使用ContinueOnError
,因为这意味着当出现实际错误时,你不知道它,或者必须做额外的检查,比如,我自己刚刚遇到这个错误,事实证明,我在Windows资源管理器中打开了有问题的文件夹,因此无法将其正确删除。选择的答案似乎是一个黑客,因为它阻止您获得实际错误,而实际错误可能是一个严重错误
我可以使用删除内容,而不是像下面那样删除目录
<MSBuild.ExtensionPack.FileSystem.Folder Condition="Exists( $(OutputPath) )" TaskAction="RemoveContent" Path="$(OutputPath)" />
如果删除该条件,会发生什么情况?RemoveDir默认设置了ContinueOnError。@Ritch Melton-ContinueOnError似乎不是默认设置,添加ContinueOnError帮助,请参见下文。我已更正。对不起,我的错误信息。我有同样的问题,不久前,这是我必须解决的解决方案。这似乎有帮助!一个简单的想法很好地回避了这个问题,但我没有想到!谢谢
<MSBuild.ExtensionPack.FileSystem.Folder Condition="Exists( $(PathtoEmpty) )"
TaskAction="RemoveContent" Path="$(PathtoEmpty)" />
<RemoveDir Directories="$(PathtoEmpty)" />
<MSBuild.ExtensionPack.FileSystem.Folder Condition="Exists( $(OutputPath) )" TaskAction="RemoveContent" Path="$(OutputPath)" />