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?)
'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
Estoy teniendo problemas muy similares. ¿Alguna vez has encontrado a tu culpable? –
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