我們的一個CruiseControl.NET項目保持間斷性地失效,因爲MSBuild任務失敗,的MSBuild「無法刪除目錄」
錯誤MSB3231:無法刪除目錄「d:\某處\導演\管理員」。該參數不正確。
相應的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,服務器故障,超級用戶...)
如果刪除條件會發生什麼情況? RemoveDir默認設置了ContinueOnError。 –
@Ritch Melton - ContinueOnError似乎不是默認值,添加了ContinueOnError幫助,見下文。 – Mormegil
我站好了。對不起,不好的信息。 –