我使用 _bin_deployableAssemblies 文件夹在每次构建后将 ASP.NET MVC 程序集复制到 bin 文件夹。不幸的是,MSBuild 任务还会复制隐藏的 .svn 文件夹。
第一次尝试修复
我想在项目级别解决这个问题,所以我添加了一个RemoveDir
任务给AfterBuild
.csproj 文件中的目标,适用于正常构建。
<RemoveDir Directories="@(OutDir).svn" />
但当我这样做时它似乎不起作用publish网站。发布后,.svn 文件夹将复制到发布向导的目标文件夹。奇怪的是,它最终也出现在项目的 /bin 文件夹中,尽管RemoveDir
task!
在目标文件中C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets
动态创建项目组以包含文件夹 _bin_deployableAssemblies 中的所有文件:
<CreateItem Include="$(MSBuildProjectDirectory)\_bin_deployableAssemblies\**\*.*"
Condition="Exists('$(MSBuildProjectDirectory)\_bin_deployableAssemblies')">
<Output ItemName="_binDeployableAssemblies" TaskParameter="Include"/>
</CreateItem>
Using a Message
任务在AfterBuild
target 我可以看到该项目组包含 .svn 文件夹中的所有文件。
第二次尝试修复
所以我尝试了以下技巧来调整 .AfterBuild 目标中的项目组:
<ItemGroup>
<_binDeployableAssemblies Remove="$(MSBuildProjectDirectory)\_bin_deployableAssemblies\.svn\**\*.*" />
</ItemGroup>
如果我使用之后打印文件列表Message
我可以看到它不再包含 .svn 文件夹中的文件。But,在构建或发布时,.svn 文件仍会复制到输出文件夹!
可能的实际修复
Publish 命令似乎首先执行常规构建,此时我们可以使用 AfterBuild 目标删除文件。但随后它将把文件复制到临时位置(在 /obj 文件夹中)以便发布它们。在此阶段,似乎它将所有内容从 _bin_deployableAssemblies 复制到 binagain然后才将 bin (和其他项目文件)复制到临时位置。这似乎发生了after构建后。
因此,诀窍可能是在将项目文件复制到临时文件夹之前在某个地方挂钩该进程。或者之后,但不仅需要清理临时文件夹,还需要第二次清理原始 bin 文件夹。这可以通过连接到许多 DependsOn 目标之一来实现。
如果没有合适的目标来执行此操作,那么从某些中间项目组中删除文件可能是一种解决方案,这样它们就不会真正被复制或发布。
由于缺乏对发布过程的了解,我无法实现这些可能的修复。
主要问题
如何防止文件被复制或在复制后删除文件?如何对常规构建和发布命令执行此操作?