在Visual Studio中需要“post clean事件”

时间:2011-02-24 09:23:30

标签: visual-studio visual-studio-2010

我有一个带有后期构建事件的VS项目,命令行命令将文件(.dll)复制到bin目标目录(调试或发布)。当我对项目进行“清理”时,每个东西都被清理干净,但这个文件仍然存在。有没有办法广告后期清理事件,所以我也可以删除这个文件?

6 个答案:

答案 0 :(得分:17)

您可以直接编辑项目文件,并将目标添加到文件末尾。 BeforeCleanAfterClean是目标解释的目标:

http://blogs.msdn.com/b/msbuild/archive/2005/11/23/496396.aspx

您应该能够在目标中放置删除任务。

修改 刚刚测试了这个(右键单击项目 - >卸载 - >右键单击 - >编辑),您需要以下目标:

<Target Name="AfterClean">
    <Delete Files="$(TargetDir)\*.txt" />
</Target>

当你清理项目而不是解决方案时,这是有效的 - 它可以工作但不是100%。

答案 1 :(得分:11)

我发现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解决方案中的文件,这样当我对源代码控制中的内容进行差异处理时,就不会混淆我的鼻涕。

答案 2 :(得分:9)

您可以使用内置的删除功能来执行通配符。

<Target Name="AfterClean">
    <ItemGroup>
        <FilesToDelete Include="$(TargetDir)\*.txt"/>
    </ItemGroup>
    <Delete Files="@(FilesToDelete)" />
</Target>

答案 3 :(得分:2)

我认为Visual Studio 2017会发生一些变化。

适用于标签:AfterTargets =&#34;清洁&#34;

<Target Name="AfterClean" AfterTargets="Clean">
     <!-- Remove bin folder -->
     <RemoveDir Directories="$(TargetDir)" />
     <!-- Remove obj folder -->
     <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" />  
</Target>

答案 4 :(得分:2)

关于 AfterTargets 的提示,请给@ scrat789提示。

对于VS 2017,v15.6.0预览版2.0,我最终得到以下内容:

  <Target Name="MyDistClean" AfterTargets="Clean">
    <Message Text="Deleting wwwroot\dist files" Importance="high" />
    <Delete Files="$(ProjectDir)\wwwroot\dist\*.*" ContinueOnError="true" />
  </Target>

一些事情:

  • 请注意我使用了唯一的目标名称 MyDistClean 。指定名称 AfterClean 不起作用。
  • 编辑后重新加载csproj是不必要的,以便运行/测试Clean任务。
  • 消息重要性设置为,以避免更改此处提到的MSBuild详细级别:AfterClean Target Doesn't Get Invoked When I Clean The Project
  • 在解决方案和项目范围内处理了
  • MyDistClean 任务。

这里的任务已经改进,以便在清理时删除webpack dist目录:

  <Target Name="MyDistClean" AfterTargets="Clean">
    <ItemGroup>
      <DistDir Include="$(ProjectDir)wwwroot\dist" />
    </ItemGroup>
    <Message Text="Deleting @(DistDir)" Importance="high" />
    <RemoveDir Directories="@(DistDir)" />
  </Target>

答案 5 :(得分:1)

您可以更新csproj文件以指定新目标。你必须在文本编辑器中使用它。

请查看此处的文档:How to: Extend the Visual Studio Build Process

您将特别更改<Target name='AfterClean'>