【问题标题】:waiting for MSBuild Delete to complete等待 MSBuild 删除完成
【发布时间】:2012-02-04 15:45:07
【问题描述】:

我正在使用 MSBuild 并且有一个删除任务,该任务会删除目录下的所有文件。下一个任务使用 RemoveDir 清除任何文件夹的目录。我有一个计时问题,在 RemoveDir 命令运行之前,该目录并不总是完全清除 Delete 命令中的文件。发生大约一半的时间,当脚本出错时,b/c RemoveDir 无法删除其中存在文件的目录。

谁能帮我解决这个问题?

【问题讨论】:

  • RemoveDir 递归删除所有文件和子目录。您不必在调用 RemoveDir 之前清理目录。 RemoveDir 在您的情况下失败,因为某些东西正在使用目录或其中的文件之一。由于这是一个时间问题,我建议运行带有详细日志记录的 msbuild(选项 /v:d 在 msbuild 命令行中),一旦您点击 repro,请仔细检查日志文件以查找可能使用您的文件或目录的其他任务正在尝试删除。

标签: msbuild


【解决方案1】:

确保在使用DependsOnTargets 运行Delete 操作之后调用RemoveDir 任务:

<Target Name="RemoveDirectories" DependsOnTargets="DeleteFiles">
  <RemoveDir Directories="@(DirsToRemove)" />
</Target>

但是,时间可能不是这里的真正问题。问题可能是DeleteFiles 无法删除某些锁定或只读文件,从而导致RemoveDir 任务无法完成。 在这种情况下,请考虑使用MSBuild Extension Pack's Folder class,它可以强制删除所有文件。

<MSBuild.ExtensionPack.FileSystem.Folder TaskAction="RemoveContent" Path="@(DirsToRemove)" Force="true" />

【讨论】:

    猜你喜欢
    • 2011-04-15
    • 2012-11-24
    • 2020-10-04
    • 2020-07-04
    • 2011-12-28
    • 2011-09-08
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多