【问题标题】:Is there a way to stop VS2008 Web Deployment Project from creating Source folder when using ExcludeFromBuild?使用 ExcludeFromBuild 时,有没有办法阻止 VS2008 Web 部署项目创建源文件夹?
【发布时间】:2011-03-18 12:17:10
【问题描述】:
当使用 ExcludeFromBuild 排除 Web 部署项目中的文件时,例如
<ItemGroup>
<ExcludeFromBuild Include="$(SourceWebPhysicalPath)\**\*.csproj*"/>
</ItemGroup>
我最终得到一个 Source 文件夹,其中包含 Release 和 Debug 文件夹旁边的所有文件夹。如果我不使用任何 ExcludeFromBuild 选项,则此文件夹不会显示。
有没有办法阻止这个文件夹被创建?为什么要创建它?
【问题讨论】:
标签:
asp.net
visual-studio-2008
msbuild
web-deployment-project
【解决方案1】:
在 Misrosoft.WebDeployments.targets 文件(导入 Web 部署项目文件)中有一个 _CopyBeforeBuild 目标,当 ExcludeFromBuild 属性不为空或指定 EnableCopyBeforeBuild 时,它会复制所有源文件:
...
<CopyBeforeBuildTargetPath>$(MSBuildProjectDirectory)\Source</CopyBeforeBuildTargetPath>
...
<Target Name="_CopyBeforeBuild" Condition=" '$(EnableCopyBeforeBuild)' == 'true' or '@(ExcludeFromBuild)' != '' ">
...
<RemoveDir Directories="$(CopyBeforeBuildTargetPath)"/>
<MakeDir Directories="$(CopyBeforeBuildTargetPath)"/>
<Copy SourceFiles="@(_WebFiles)" DestinationFolder="$(CopyBeforeBuildTargetPath)\%(_WebFiles.SubFolder)%(_WebFiles.RecursiveDir)" />
...
</Target>
所以脚本会创建源目录并且不会删除它。那个目录也让我很烦,所以我在 web 部署项目文件中添加了下一行:
<Target Name="AfterBuild">
<RemoveDir Directories="$(CopyBeforeBuildTargetPath)" />
</Target>