visual tag studio instalar code closing change brackethighlighter autocompletar visual-studio-2010 msbuild teamcity

visual studio 2010 - tag - ¿Qué es la limpieza incremental en msbuild y cuándo se activa?



visual studio code autocomplete html (3)

Estoy depurando un error en mi proceso de compilación que ocurre ocasionalmente pero no puedo reproducirlo directamente. Estoy usando msbuild con teamcity.

Tengo una jerarquía de dependencias como esta:

Some.Interop.dll Dependency-> SharedDllABC.dll SomeService.exe Depenendcy-> Some.Interop

Por lo general, el servicio final se puede obtener en su directorio de lanzamiento:

Some.Interop SharedDllABC.Dll ServiceExectuable.exe

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

Some.Interop ServiceExectuable.exe

Puedes verlo 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

Esta es mi salida directa de msbuild, acabo de cambiar los nombres de proyecto / dll para coincidir con mi ejemplo. En el momento en que se haya realizado esta limpieza incremental, SomeService.csproj ya se SomeService.csproj creado. Se puede ver que no se está copiando. Sin embargo, en otros registros de msbuild, se copia correctamente y luego la limpieza incremental no lo elimina.

Creo que la limpieza incremental de esta publicación se supone que limpia las dll creadas a partir de versiones anteriores, pero eso no explica cómo esta dll no se construyó la mayoría de las veces. En el estudio visual esto siempre funciona así.

Supongo que solo quiero saber qué es exactamente Incremental clean , qué causa que se active, y tal vez qué debo buscar al depurar una situación como esta (versiones de ensamblaje, marcas de tiempo, etc.)


@Kebabbi recomienda una buena solución, pero hay una forma sencilla de aplicar todos estos archivos CSPROJ, en lugar de editar cada archivo csproj.

Esto ya no es necesario con MSBuild 15 - https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build?view=vs-2017

Cree un archivo Directory.Build.props y colóquelo junto al archivo SLN.

<Project> <Target Name="ForceAssignProjectConfigurationBeforeSplitProjectReferencesByFileExistence_KLUDGE" BeforeTargets="_SplitProjectReferencesByFileExistence" DependsOnTargets="AssignProjectConfiguration" /> </Project>


Esto podría deberse a un error en MsBuild: https://github.com/Microsoft/msbuild/issues/1054 . Se propone una solución en los comentarios: https://github.com/Microsoft/msbuild/issues/1054#issuecomment-406438561

Cuando MsBuild determina qué elementos copiar de los proyectos a los que se hace referencia, debe hacerlo recursivamente pero no lo hace correctamente.

Como solución alternativa, se puede agregar lo siguiente a cada csproj.

<Target Name="ForceAssignProjectConfigurationBeforeSplitProjectReferencesByFileExistence_KLUDGE" BeforeTargets="_SplitProjectReferencesByFileExistence" DependsOnTargets="AssignProjectConfiguration" />