MSBuild не удается удалить каталог двоичных файлов
Я строю два решения с MSBuild:
<ItemGroup>
<SolutionToBuild Include="$(BuildProjectFolderPath)/HostASPX/SolutionA.sln"/>
<SolutionToBuild Include="$(BuildProjectFolderPath)/../Installer/SolutionB.sln"/>
</ItemGroup>
Похоже, что эта сборка завершается неудачей с сообщением об ошибке:
Невозможно удалить каталог "c:TeamBuildTeam решениярешения двоичные файлы". Каталог не пуст.
Похоже, что MSBuild создает этот каталог двоичных файлов по умолчанию,и сборка проходит. Когда я строю снова, сборка завершается неудачей с приведенным выше сообщением. Если я попробую 3-ю сборку.. это снова работает.
Может ли кто-нибудь сказать мне, как обеспечить что его папка каждый раз удаляется/перезаписывается?
2 ответа:
Вы уверены, что нетэффекта наблюдателя в игре? то есть, что-то не блокирует каталог, как проводник.exe: P
Вы можете исключить его, используя
\\live.sysinternals.com\procmon.exe
(чтобы узнать, кто что делает с dir) и procexp (чтобы узнать, кто блокирует его).
Я столкнулся с той же проблемой "невозможно удалить каталог ... каталог не пуст" при запуске цели, которая выглядит примерно так:
<Target Name="CleanFiles" DependsOnTargets="Prepare_Files" Inputs="@(Files->'%(OutputPath)'->Distinct())" Outputs="_Non_Existent_Item_To_Batch_"> <ItemGroup> <DirsToDelete Include="@(Files->'%(OutputPath)'->Distinct())"/> </ItemGroup> <RemoveDir Directories="@(DirsToDelete)"/> </Target>
Иногда он работал нормально и удалял каталоги, но часто я получал ошибку выше.
В конце концов я обнаружил, чтоMSBuild сама блокирует файлы , если они появляются на "входах" цели, а не разблокирует их вовремя для удаления RemoveDir.
Изменение вышеуказанного кому:<Target Name="CleanFiles" DependsOnTargets="Prepare_Files"> <ItemGroup> <DirsToDelete Include="@(Files->'%(OutputPath)'->Distinct())"/> </ItemGroup> <RemoveDir Directories="@(DirsToDelete)"/> </Target>
, кажется, решает проблему.
По-прежнему можно удалять все каталоги всегда, так как RemoveDir пропускает несуществующие каталоги и не сообщает об ошибке.