Что такое инкрементная очистка в msbuild и когда она запускается?

Я исправляю ошибку в процессе сборки, которая иногда возникает, но я не могу воспроизвести ее напрямую. Я использую msbuild с teamcity.

У меня есть такая иерархия зависимостей:

Some.Interop.dll
   Dependency-> SharedDllABC.dll

SomeService.exe
   Depenendcy-> Some.Interop

Обычно окончательный исполняемый файл службы попадает в свой каталог выпуска:

Some.Interop
SharedDllABC.Dll
ServiceExectuable.exe

Однако я вижу в наших журналах msbuild, что иногда третичная зависимость удаляется во время добавочной очистки после того, как все встроенный результат:

Some.Interop
ServiceExectuable.exe

Вы можете увидеть это здесь, в журнале 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

Это мой прямой вывод msbuild, я просто изменил имена проектов/dll, чтобы они соответствовали моему примеру. К тому времени, когда произошла эта добавочная очистка, SomeService.csprojуже был собран. Вы можете видеть, что его не копируют. Однако в других журналах msbuild он правильно копируется, а затем добавочная очистка не удаляет его.

Я думаю, что поэтапная очистка из этого постапредназначена для очистки dll, которые были созданы из предыдущих сборок, но это не объясняет, почему эта dll не собиралась, когда в большинстве случаев это происходит. В визуальной студии это всегда работает.

Наверное, я просто хочу знать, что такое Incremental clean, что вызывает его срабатывание и, возможно, на что следует обращать внимание при отладке подобной ситуации (версии сборки, временные метки и т. д.). ?)

19
задан devshorts 2 July 2012 в 21:34
поделиться