在Visual Studio中需要"post clean事件"

Ska*_*gen 18 visual-studio-2010 visual-studio

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

Leo*_*rke 17

您可以直接编辑项目文件,并将目标添加到文件末尾. BeforeClean并且AfterClean是这里解释的目标:

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

您应该能够在目标中放置一个删除任务.

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

<Target Name="AfterClean">
    <Delete Files="$(TargetDir)\*.txt" />
</Target>
Run Code Online (Sandbox Code Playgroud)

这在您清理项目但不是解决方案时有效 - 它可以工作但不是100%.

  • 如果我使用 `Target Name="AfterClean"` 它不起作用。任何其他自定义名称都可以。 (3认同)

Fra*_*tis 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>
Run Code Online (Sandbox Code Playgroud)

我写了上面的内容来删除umbraco解决方案中的文件,这样当我对源代码控制中的内容进行差异处理时,它就不会让我感到困惑.


小智 9

您可以使用内置的Delete功能执行通配符.

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


scr*_*789 7

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

适用于标签:AfterTargets="Clean"

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


bvj*_*bvj 5

关于AfterTargets的 @ scrat789 提示

对于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>
Run Code Online (Sandbox Code Playgroud)

一些东西:

  • 注意,我使用的是唯一的目标名称MyDistClean。指定名称AfterClean无效。
  • 无需在编辑后重新加载csproj即可运行/测试Clean任务。
  • 消息重要性设置为很高,以避免更改SO在此处提到的MSBuild详细级别:清理项目时,不会调用AfterClean目标
  • MyDistClean任务在解决方案和项目范围内均得到处理。

这是经过改进的任务,可以在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>
Run Code Online (Sandbox Code Playgroud)

  • 名字是我的问题!AfterClean 确实不起作用。谢谢。 (2认同)