Uno dei nostri progetti CruiseControl.NET continua ad intermittenza in mancanza, perché un compito msbuild fallisce conMSBuild “Impossibile rimuovere directory”
errore MSB3231: Impossibile rimuovere directory "d: \ Da qualche parte \ Dir \ Admin". Il parametro non è corretto.
Il corrispondente riga dello script msbuild è solo
<RemoveDir Directories="$(DistributionDir)\Admin" Condition="Exists('$(DistributionDir)\Admin')" />
Quando guardo lo stato dopo la generazione non riuscita, i contenuti della directory è stato rimosso con successo, ma la directory vuota in sé è rimasto lì. E la prossima build di solito riesce (dovendo rimuovere solo la directory vuota). Si noti che il problema non sembra essere il solito "qualche altro processo (come antivirus) continua a bloccare la directory", l'errore non è "accesso negato", ma uno strano "il parametro non è corretto".
Ho monitorato la generazione con SysInternals Process Monitor e il risultato è strano: tutto procede come previsto, il contenuto della directory viene enumerato, eliminato e quando l'enumerazione delle directory di livello superiore termina con "NO MORE FILES", la directory è chiusa e ... niente. Nessun altra operazione arriva al monitor di processo:
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
Il prossimo (di successo) costruire tentativo è solo un noioso successo rimozione directory:
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
Sembra per qualche ragione, MSBuild/Windows rileva un qualche tipo di errore di parametro non valido prima che venga eseguita la rimozione della directory, ma non ho idea di dove cercare. (Ho anche provato a eseguire chkdsk, non è stato trovato nulla.Ho anche rimosso e ricreato la directory padre D: \ Somewhere \ Dir, nulla è cambiato.)
Quindi - qualsiasi idea di dove il problema potrebbe essere o come dovrei investigare ulteriormente?
(non sono sicuro dove questa domanda avrebbe dovuto andare, è una specie di qualche parte tra SO, Progs SE, server Fault, Superuser ...)
Cosa succede se si rimuove la condizione? RemoveDir ha ContinueOnError impostato di default. –
@Ritch Melton - ContinueOnError non sembra essere l'impostazione predefinita, aggiungendo l'aiuto di ContinueOnError, vedi sotto. – Mormegil
Sono stato corretto. Ci scusiamo per le informazioni negative. –