在我们的构建过程中,对于每个项目,我们使用Post Build事件将可执行文件复制到单独的部署目录中。这只是很好用,但问题是我们在执行Clean Solution / Clean Project后遇到了陈旧文件的问题。我想设置一个删除复制文件的“清理”事件,Visual Studio 2008似乎没有在项目属性页面中提供选项。
它有:
Build Events:
Pre-Build Event
Pre-Link Event
Post-Build Event
Custom Build Step
General
我想要找到的是在清理项目时执行任意命令行的一些方法。
答案 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开始,以下是各种构建步骤的调用顺序:
构建后活动
答案 5 :(得分:0)
其他人并没有完全按照我的意愿行事,我只是找到了更好的方法。在VS2010中测试C ++ Win32项目,转到项目属性 - &gt;配置属性 - &gt;自定义构建设置。您可以添加自定义命令行,并告诉VS在执行命令之前或之后执行命令的操作。