如何在Visual Studio 2008中创建自定义清理(后清理)事件?

时间:2009-03-10 18:22:04

标签: c++ visual-studio visual-studio-2008 visual-c++

在我们的构建过程中,对于每个项目,我们使用Post Build事件将可执行文件复制到单独的部署目录中。这只是很好用,但问题是我们在执行Clean Solution / Clean Project后遇到了陈旧文件的问题。我想设置一个删除复制文件的“清理”事件,Visual Studio 2008似乎没有在项目属性页面中提供选项。

它有:

Build Events:
   Pre-Build Event
   Pre-Link Event
   Post-Build Event
Custom Build Step
   General

我想要找到的是在清理项目时执行任意命令行的一些方法。

6 个答案:

答案 0 :(得分:32)

您可以在csproj文件中使用MSBuild目标语法。 e.g

  <Target Name="AfterClean">
    <Delete Files="$(OutDir)\$(TargetName).exe" ContinueOnError="true" />
  </Target>

有一种简洁的方法可以直接在MSBuild团队博客中描述的Visual Studio IDE中编辑.csproj文件,但这是我的第一篇文章,所以我只能包含一个超链接。 (简单地说:卸载项目,然后右键单击它以查看条目“Edit [project] .csproj”...您的csproj将作为xml文件出现在IDE中,其中包含元素和属性的intellisense。太棒了!)

自定义目标的完整列表位于:http://blogs.msdn.com/b/msbuild/archive/2005/11/23/496396.aspx

答案 1 :(得分:8)

对于Visual C ++项目,您需要将文件添加到“常规”项目配置属性下的“要清除时删除的扩展”部分。虽然它声称需要扩展,但它实际上使用了globs并且很乐意接受完整路径并扩展MSBuild变量。这对我有用:

  

$(ProjectDir)\deployment\*.*

我不确定你是否可以通过这种方式删除目录,但它至少可以获取文件。

答案 2 :(得分:3)

如果您使用&#34;项目属性 - &gt;配置属性 - &gt;自定义构建设置&#34;你必须记住填写输出&#39;字段,否则它不会运行。

从:

http://blogs.msdn.com/b/visualstudio/archive/2010/04/26/custom-build-steps-tools-and-events.aspx

&#34; Outputs属性是以分号分隔的文件列表,必须列出在执行自定义构建步骤时生成的任何文件。如果将Outputs属性保留为空,则自定义构建步骤将永远不会执行,因为MSBuild将确定没有输出已过期。如果你的步骤没有生成文件,但你仍然希望它在每次构建时执行,那么组成一个伪文件名就可以了,因为该文件永远不存在,MSBuild将始终确定自定义构建步骤已过时。 &#34;

答案 3 :(得分:1)

您需要手动编辑.csproj文件并添加“AfterClean”目标。

答案 4 :(得分:1)

遗憾的是,没有记录的方法来插入自定义清理步骤。您可以在预构建事件中清理输出,但仍然会在清理后留下文物。

从MSDN开始,以下是各种构建步骤的调用顺序:

  1. 预建活动
  2. 单个文件的自定义构建步骤
  3. 代理生成器
  4. MIDL
  5. 资源编译器
  6. C / C ++编译器
  7. 预链接事件
  8. 链接或图书馆员(视情况而定)
  9. BSCMAKE
  10. 项目的自定义构建步骤
  11. 部署工具。
  12. 构建后活动

    MSDN:Understanding custom build steps

答案 5 :(得分:0)

其他人并没有完全按照我的意愿行事,我只是找到了更好的方法。在VS2010中测试C ++ Win32项目,转到项目属性 - &gt;配置属性 - &gt;自定义构建设置。您可以添加自定义命令行,并告诉VS在执行命令之前或之后执行命令的操作。