如何防止从_bin_deployableAssemblies文件夹中复制隐藏的.svn文件夹?

时间:2011-08-01 20:57:08

标签: asp.net visual-studio-2010 svn msbuild web-deployment

我在每次构建后使用_bin_deployableAssemblies文件夹将ASP.NET MVC程序集复制到bin文件夹。不幸的是,MSBuild任务还复制了隐藏的.svn文件夹。

首次尝试修复

我想在项目级别解决此问题,因此我在.csproj文件中的RemoveDir目标中添加了AfterBuild任务,该文件适用于普通版本。

<RemoveDir Directories="@(OutDir).svn" />

但是当我发布该网站时,它似乎无效。发布后,.svn文件夹将复制到发布向导的目标文件夹中。奇怪的是,尽管有RemoveDir任务,它也会在项目的/ bin文件夹中结束!

在目标文件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>

使用Message目标中的AfterBuild任务,我可以看到此项目组包含.svn文件夹中的所有文件。

第二次尝试修复

所以我尝试了以下技巧来调整.AfterBuild目标中的项目组:

<ItemGroup>
    <_binDeployableAssemblies Remove="$(MSBuildProjectDirectory)\_bin_deployableAssemblies\.svn\**\*.*" />
</ItemGroup>

如果我使用Message任务打印文件列表,我可以看到它不再包含.svn文件夹中的文件。 ,在构建或发布时,.svn文件仍会复制到输出文件夹中!

可能的实际修复

似乎Publish命令首先进行常规构建,此时我们可以使用AfterBuild目标删除文件。但随后它将文件复制到临时位置(在/ obj文件夹中)以便发布它们。在此阶段,它似乎将所有内容从_bin_deployableAssemblies复制到bin 再次,然后才将bin(和其他项目文件)复制到临时位置。这似乎发生在之后在AfterBuild之后。

所以诀窍可能是在将项目文件复制到临时文件夹之前挂钩进程。或者之后,不仅需要清除临时文件夹,还需要第二次清除原始bin文件夹。这可能是通过钩住许多DependsOn目标中的一个来实现的。

如果没有合适的目标来执行此操作,那么从某些中间项目组中删除文件可能是一种解决方案,因此它们实际上从未被复制或发布。

由于缺乏对发布流程的理解,我无法实现这些可能的修复。

主要问题

如何防止文件被复制或复制后删除文件?如何为常规版本和发布命令执行此操作?

1 个答案:

答案 0 :(得分:5)

将此添加到.csproj文件(或{projectName}.wpp.targets文件):

  <PropertyGroup>
    <OnAfterCopyAllFilesToSingleFolderForPackage>
      __RemoveSvnFromPackageTemp
    </OnAfterCopyAllFilesToSingleFolderForPackage>
  </PropertyGroup>

  <Target Name="__RemoveSvnFromBin" AfterTargets="_CopyBinDeployableAssemblies">
    <Message Text="Removing .SVN from BIN" Importance="normal"/>
    <RemoveDir Directories="$(OutDir).svn" />
  </Target>

  <Target Name="__RemoveSvnFromPackageTemp">
    <Message Text="Removing .SVN from PackageTempDir" Importance="normal"/>
    <RemoveDir Directories="$(_PackageTempDir)\bin\.svn" />
  </Target>

适用于构建,打包和发布!