2012-06-28 6 views
17

Sto eseguendo il debug di un bug nel mio processo di build che accade occasionalmente ma non riesco a riprodurlo direttamente. Sto usando msbuild con teamcity.Cosa è pulito in modo incrementale in msbuild e quando viene attivato?

Ho una gerarchia delle dipendenze come questo:

Some.Interop.dll 
    Dependency-> SharedDllABC.dll 

SomeService.exe 
    Depenendcy-> Some.Interop 

Di solito l'exectuable servizio finale ottiene nella sua directory di rilascio:

Some.Interop 
SharedDllABC.Dll 
ServiceExectuable.exe 

Tuttavia posso vedere nei nostri registri di MSBuild che a volte la dipendenza terziaria viene cancellato durante un Incremental Clean dopo che tutto è stato creato risultando in:

Some.Interop 
ServiceExectuable.exe 

Potete vedere qui nel registro msbuild:

[src\SomeService\SomeService.csproj] _TimeStampAfterCompile 
[12:32:43]: [src\SomeService\SomeService.csproj] Compile 

// some other targets 

[12:32:43]: [src\SomeService\SomeService.csproj] _CopyFilesMarkedCopyLocal 
[12:32:43]:  [_CopyFilesMarkedCopyLocal] Copy 
[12:32:43]:   [Copy] Copying file from "C:Projects\trunk\src\Some.Interop\bin\Release\Some.Interop.dll" to "bin\Release\Some.Interop.dll". 

// some other targets 

[src\Project\SomeService\SomeService.csproj] IncrementalClean 
[18:54:42]:   [IncrementalClean] Delete 
[18:54:42]:    [Delete] Deleting file "C:\Projects\trunk\src\Project\SomeService\bin\Release\SharedDllABC.dll". 
[18:54:42]:    [Delete] Deleting file "C:\Projects\trunk\src\Project\SomeServiceService\bin\Release\SharedDllABC.pdb". 
[18:54:42]:  [src\Project\SomeService\SomeService.csproj] CoreBuild 
[18:54:42]:  [src\Project\SomeService\SomeService.csproj] AfterBuild 
[18:54:42]:  [src\Project\SomeService\SomeService.csproj] Build 

Questa è la mia uscita diretta msbuild, ho solo cambiato i nomi nomi di progetto/DLL per abbinare il mio esempio. Nel momento in cui si è verificata questa pulizia incrementale, SomeService.csproj è già stato creato. Puoi vedere che non è stato copiato. Tuttavia in altri log di msbuild viene correttamente copiato e quindi il clean incrementale non lo elimina.

Penso che la pulizia incrementale da this post si supponga di pulire le DLL che sono state create da build precedenti, ma ciò non spiega come questa DLL non sia stata creata quando la maggior parte delle volte lo fa. In Visual Studio funziona sempre così.

Credo voglio solo sapere che cosa è esattamente Incremental clean, ciò induce a calci in, e forse ciò che le cose che dovrei cercare quando il debug di una situazione come questa (le versioni di montaggio, timestamp, ecc?)

+2

'IncrementalClean' è implementato in' C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets'. C'è un sacco di logica in là ... Se vuoi saperne di più, aggiungi alcune stampe lì - '', e forse vedrai che logica è. – Jonathan

+1

Sto avendo problemi molto simili. Hai mai trovato il tuo colpevole? –

+0

Sebastian, non sono riuscito a capirlo. Quello che ho finito per fare è stato creare una forte dipendenza da questo file dal progetto che ne aveva bisogno. Non era l'ideale, ma funziona. Alcune altre soluzioni del mio team sono state creare test unitari per testare le dll previste, che avrebbero almeno impedito ai build falliti di uscire su client/macchine di prova. – devshorts

risposta

Problemi correlati