2012-02-04 51 views
3

我正在使用MSBuild並有一個刪除任務,刪除目錄下的所有文件。下一個任務使用RemoveDir清除任何文件夾的目錄。我有一個時間問題,在RemoveDir命令運行之前,目錄並不總是完全清除Delete命令中的文件。出現大約一半的時間,並且當腳本出錯時,B/C RemoveDir不能刪除其中存在文件的目錄。正在等待MSBuild刪除完成

有人可以幫我解決這個問題嗎?

+1

RemoveDir以遞歸方式刪除所有文件和子目錄。在調用RemoveDir之前,您不必清除目錄。您的案例中的RemoveDir失敗,因爲某些內容正在使用該目錄或其中的一個文件。由於這是一個計時問題,我建議使用詳細日誌記錄(msbuild命令行中的選項/ v:d)運行msbuild,並且一旦你點擊repro仔細檢查日誌文件,查看可能使用文件或目錄的其他任務的日誌文件正試圖刪除。 – 2012-02-05 02:23:48

回答

3

確保您呼叫的Delete動作後RemoveDir任務已經使用DependsOnTargets運行:

<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" />