【发布时间】:2022-03-13 17:07:49
【问题描述】:
我得到了一个带有构建后事件的 VS 项目,该项目带有一个命令行命令,该命令将文件 (.dll) 复制到 bin 目标目录(调试或发布)。当我对项目进行“清理”时,所有东西都被清理了,但这个文件仍然存在。有没有办法发布清理后事件,以便我也可以删除此文件?
【问题讨论】:
标签: visual-studio visual-studio-2010
我得到了一个带有构建后事件的 VS 项目,该项目带有一个命令行命令,该命令将文件 (.dll) 复制到 bin 目标目录(调试或发布)。当我对项目进行“清理”时,所有东西都被清理了,但这个文件仍然存在。有没有办法发布清理后事件,以便我也可以删除此文件?
【问题讨论】:
标签: visual-studio visual-studio-2010
您可以直接编辑项目文件并将目标添加到文件末尾。 BeforeClean 和 AfterClean 是此处解释的目标:
您应该能够在目标中放置一个删除任务。
编辑 刚刚测试了这个(右键项目->卸载->右键->编辑),下面的目标就是你需要的:
<Target Name="AfterClean">
<Delete Files="$(TargetDir)\*.txt" />
</Target>
这在您清理项目而不是解决方案时有效 - 它有效但不是 100%。
【讨论】:
<Exec Command="gulp clean" /> 而不是 <Delete Files="$(TargetDir)\*.txt" />。
Target Name="AfterClean" 它不起作用。任何其他自定义名称都会这样做..
@scrat789 关于AfterTargets的提示。
对于 VS 2017,v15.6.0 Preview 2.0,我最终得到以下结果:
<Target Name="MyDistClean" AfterTargets="Clean">
<Message Text="Deleting wwwroot\dist files" Importance="high" />
<Delete Files="$(ProjectDir)\wwwroot\dist\*.*" ContinueOnError="true" />
</Target>
一些事情:
以下是改进后的任务,以在 Clean 时删除 webpack dist 目录:
<Target Name="MyDistClean" AfterTargets="Clean">
<ItemGroup>
<DistDir Include="$(ProjectDir)wwwroot\dist" />
</ItemGroup>
<Message Text="Deleting @(DistDir)" Importance="high" />
<RemoveDir Directories="@(DistDir)" />
</Target>
【讨论】:
我发现 Leom Burke 使用“删除文件”的回答不适用于通配符,也没有告诉您出现任何问题。这就是我所做的 -
<Target Name="BeforeClean">
<Message Text="Cleaning other files..."/>
<Exec Command="del $(ProjectDir)css\*.* /F /Q"/>
<Exec Command="del $(ProjectDir)images\*.* /F /Q" />
<Exec Command="del $(ProjectDir)js\*.* /F /Q" />
<Exec Command="del $(ProjectDir)usercontrols\*.* /F /Q" />
<Exec Command="del $(ProjectDir)MasterPages\*.* /F /Q" />
<Exec Command="del $(ProjectDir)App_Data\TEMP\*.* /F /Q /S" />
<Exec Command="del $(ProjectDir)App_Data\Logs\*.* /F /Q /S" />
</Target>
我编写以上内容是为了删除 umbraco 解决方案中的文件,这样当我对源代码控制中的内容进行比较时,它不会让我感到困惑。
【讨论】:
您可以使用内置的删除功能来做通配符。
<Target Name="AfterClean">
<ItemGroup>
<FilesToDelete Include="$(TargetDir)\*.txt"/>
</ItemGroup>
<Delete Files="@(FilesToDelete)" />
</Target>
【讨论】:
我认为 Visual Studio 2017 发生了一些变化。
适用于标签:AfterTargets="Clean"
<Target Name="AfterClean" AfterTargets="Clean">
<!-- Remove bin folder -->
<RemoveDir Directories="$(TargetDir)" />
<!-- Remove obj folder -->
<RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" />
</Target>
【讨论】:
您可以更新 csproj 文件以指定新目标。您必须在文本编辑器中进行此操作。
在此处查看文档:How to: Extend the Visual Studio Build Process。
您将不得不特别更改<Target name='AfterClean'>
【讨论】:
继续其他人的提示 - 希望这也会有所帮助(我花了一些时间来弄清楚),不能在下面的代码中加粗,所以请注意 $(APPDATA) 部分..
...
<Target Name="MyDistClean" AfterTargets="Clean">
<ItemGroup>
<DistDir Include="$(APPDATA)\MyApp\Configuration\" />
</ItemGroup>
<Message Text="Deleting @(DistDir)" Importance="high" />
<RemoveDir Directories="@(DistDir)" />
</Target>
</Project>
【讨论】: