MSBuild无法删除Binaries目录

4
我正在使用MSBuild构建两个解决方案:
<ItemGroup> 
    <SolutionToBuild Include="$(BuildProjectFolderPath)/HostASPX/SolutionA.sln"/>    
    <SolutionToBuild Include="$(BuildProjectFolderPath)/../Installer/SolutionB.sln"/>     
  </ItemGroup>  

似乎此构建失败,错误消息如下:
无法删除目录“c:\TeamBuild\Team Solutions\Solution\Binaries”。该目录不为空。
看起来MSBuild默认创建此“Binaries”目录,并且构建通过。当我再次构建时,构建失败并显示上述消息。如果我尝试第三次构建,则它又可以正常工作。
有人能告诉我如何确保每次都删除/覆盖此文件夹吗?
2个回答

4

你确定没有观察效应在起作用吗?即,有没有类似于explorer.exe这样的东西锁定了目录:P

你可以使用\\live.sysinternals.com\procmon.exe(查找谁在对目录做什么)和procexp(查找谁锁定了它)来排除这种可能性。


@Nick 我也遇到了同样的问题,最终是什么原因导致的呢? - Richard Forrest
@Ruben Bartelink,您是指观察效应吗?http://en.wikipedia.org/wiki/Observer_effect_(physics) - juFo
@juFo 是的,再次使用我不理解的词语的单词是什么 :) 已修复。 - Ruben Bartelink
1
@RubenBartelink 我也不理解,但维基百科告诉我那是错误的 ;-p - juFo

0

我在运行类似于以下目标时遇到了相同的问题"无法删除目录...目录不为空"

 <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跳过不存在的目录并且不报告错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接