2012-06-28 7 views
17

Estoy depurando un error en mi proceso de compilación que ocurre ocasionalmente pero no puedo reproducirlo directamente. Estoy usando msbuild con teamcity.¿Qué es la limpieza incremental en msbuild y cuándo se desencadena?

que tienen una jerarquía de dependencias de esta manera:

Some.Interop.dll 
    Dependency-> SharedDllABC.dll 

SomeService.exe 
    Depenendcy-> Some.Interop 

lo general, el exectuable servicio final se pone en su directorio de versión:

Some.Interop 
SharedDllABC.Dll 
ServiceExectuable.exe 

Sin embargo puedo ver en nuestros registros msbuild que a veces la dependencia terciaria se elimina durante una limpieza incremental después de que todo está construido, lo que resulta en:

Some.Interop 
ServiceExectuable.exe 

Se puede ver aquí en el registro de 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 

Ésta es mi salida msbuild directa, que acaba de cambiar los nombres de nombres de proyecto/dll para que coincida con mi ejemplo. En el momento en que se produjo esta limpieza incremental, el SomeService.csproj ya se ha creado. Puedes ver que no se está copiando. Sin embargo, en otros registros msbuild se copia correctamente y luego la limpieza incremental no lo elimina.

Creo que incrementeal clean desde this post se supone que limpia dll que se crearon a partir de compilaciones previas, pero eso no explica cómo este dll no se construyó la mayor parte del tiempo lo hace. En el estudio visual esto siempre funciona así.

supongo que sólo quiero saber qué es exactamente Incremental clean, lo que hace que se produzca, y quizás qué cosas debo buscar al depurar una situación como esta (versiones de montaje, marcas de tiempo, etc?)

+2

'IncrementalClean' se implementa en' C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets'. Hay mucha lógica ahí ... Si quieres saber más, agrega algunas copias allí - '', y tal vez verás qué lógica es. – Jonathan

+1

Estoy teniendo problemas muy similares. ¿Alguna vez has encontrado a tu culpable? –

+0

Sebastian, nunca fui capaz de resolverlo. Lo que terminé haciendo fue crear una dependencia fuerte en este archivo del proyecto que lo necesitaba. No fue ideal, pero funciona. Algunas otras soluciones que se propuso mi equipo fueron crear pruebas unitarias para probar dll esperadas, lo que al menos evitaría que las construcciones fallidas lleguen a clientes/máquinas de prueba. – devshorts

Respuesta

Cuestiones relacionadas