Visual studio 2008 如何使用msbuild/web部署项目删除多个文件?
我对msbuild在VS2008 Web部署项目中的行为有一个奇怪的问题,我想知道为什么它看起来是随机的错误行为 我需要从部署文件夹中删除一些只应存在于我的开发环境中的文件。这些文件是在开发/测试期间由web应用程序生成的,不包括在我的Visual Studio项目/解决方案中 我使用的配置如下所示:Visual studio 2008 如何使用msbuild/web部署项目删除多个文件?,visual-studio-2008,msbuild,web-deployment-project,Visual Studio 2008,Msbuild,Web Deployment Project,我对msbuild在VS2008 Web部署项目中的行为有一个奇怪的问题,我想知道为什么它看起来是随机的错误行为 我需要从部署文件夹中删除一些只应存在于我的开发环境中的文件。这些文件是在开发/测试期间由web应用程序生成的,不包括在我的Visual Studio项目/解决方案中 我使用的配置如下所示: <!-- Partial extract from Microsoft Visual Studio 2008 Web Deployment Project --> <ItemG
<!-- Partial extract from Microsoft Visual Studio 2008 Web Deployment Project -->
<ItemGroup>
<DeleteAfterBuild Include="$(OutputPath)data\errors\*.xml" /> <!-- Folder 1: 36 files -->
<DeleteAfterBuild Include="$(OutputPath)data\logos\*.*" /> <!-- Folder 2: 2 files -->
<DeleteAfterBuild Include="$(OutputPath)banners\*.*" /> <!-- Folder 3: 1 file -->
</ItemGroup>
<Target Name="AfterBuild">
<Message Text="------ AfterBuild process starting ------" Importance="high" />
<Delete Files="@(DeleteAfterBuild)">
<Output TaskParameter="DeletedFiles" PropertyName="deleted" />
</Delete>
<Message Text="DELETED FILES: $(deleted)" Importance="high" />
<Message Text="------ AfterBuild process complete ------" Importance="high" />
</Target>
我遇到的问题是,当我构建/重建Web部署项目时,“有时”会删除所有文件,但有时不会删除任何内容!或者,它将仅删除DeleteAfterBuild项目组中三个文件夹中的一个或两个。在构建过程决定是否删除文件时,似乎没有一致性
当我将配置编辑为仅包含文件夹1(例如)时,它会正确删除所有文件。然后添加文件夹2和3,它开始删除我想要的所有文件。然后,看起来是随机的,我会重建项目,它不会删除任何文件
我曾尝试将这些项目移动到ExcludeFromBuild项目组(这可能是它应该所在的位置),但它给了我同样不可预测的结果
有人经历过吗?我做错什么了吗?为什么会发生这种情况?查看我刚刚发布的博客,我想它可能会对你有所帮助。如果没有,请告诉我 Sayed Ibrahim Hashimi在加载脚本时以及处理
之前对
进行评估
要正确地做到这一点,似乎有多种方法-
包含在
中,并应在正确的时间对其进行评估。这将适用于MS Build v3.5+
生成项目列表<!-- Using ItemGroup -->
<Target Name="AfterBuild">
<ItemGroup>
<DeleteAfterBuild Include="$(OutputPath)data\errors\*.xml" />
</ItemGroup>
<Delete Files="@(DeleteAfterBuild)" />
</Target>
<!-- Using CreateItem -->
<Target Name="AfterBuild">
<CreateItem Include="$(OutputPath)data\errors\*.xml">
<Output TaskParameter="Include" ItemName="DeleteAfterBuild"/>
</CreateItem>
<Delete Files="@(DeleteAfterBuild)" />
</Target>
解释删除过程产生“不可预测”结果的原因-
@(DeleteAfterBuild)
将在没有文件的情况下进行计算,因为文件不存在于$(OutputPath)
文件夹中,并且不会删除作为AfterBuild
目标一部分的任何文件@(DeleteAfterBuild)
将使用$(OutputPath)
文件夹中的所有预期文件进行计算,并将作为AfterBuild
目标的一部分删除这些文件我意识到这个问题已经得到了回答,但我想我会加上我的5美分。对于Web部署项目,不需要使用提供的目标,只需添加一个包含ExcludeFromBuild元素的项目组。我已经从部署项目文件的底部提供了相关部分以供参考
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WebDeployment\v9.0\Microsoft.WebDeployment.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.WebDeployment.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="BeforeMerge">
</Target>
<Target Name="AfterMerge">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<ItemGroup>
<ExcludeFromBuild Include="$(SourceWebPhysicalPath)\obj\**\*.*" />
<ExcludeFromBuild Include="$(SourceWebPhysicalPath)\Properties\**\*.*" />
<ExcludeFromBuild Include="$(SourceWebPhysicalPath)\**\*.csproj*" />
<ExcludeFromBuild Include="$(SourceWebPhysicalPath)\**\*.resx" />
<ExcludeFromBuild Include="$(SourceWebPhysicalPath)\**\*.Publish.xml" />
<ExcludeFromBuild Include="$(SourceWebPhysicalPath)\LocalTestRun.testrunconfig" />
<ExcludeFromBuild Include="$(SourceWebPhysicalPath)\TestResults\**\*.*" />
</ItemGroup>
+1-我的头也被刮伤了。这是一个完美的答案。谢谢