Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在VisualStudio2008中创建自定义清理(清理后)事件?_C++_Visual Studio_Visual Studio 2008_Visual C++ - Fatal编程技术网

C++ 如何在VisualStudio2008中创建自定义清理(清理后)事件?

C++ 如何在VisualStudio2008中创建自定义清理(清理后)事件?,c++,visual-studio,visual-studio-2008,visual-c++,C++,Visual Studio,Visual Studio 2008,Visual C++,在构建过程中,对于每个项目,我们使用构建后事件将可执行文件复制到单独的部署目录中。这很管用,但问题是我们在执行干净的解决方案/干净的项目后遇到了陈旧文件的问题。我想设置一个“Clean”事件来删除复制的文件,而VisualStudio2008似乎没有在项目属性页面中提供选项 它有: Build Events: Pre-Build Event Pre-Link Event Post-Build Event Custom Build Step General 我想找到的是在

在构建过程中,对于每个项目,我们使用构建后事件将可执行文件复制到单独的部署目录中。这很管用,但问题是我们在执行干净的解决方案/干净的项目后遇到了陈旧文件的问题。我想设置一个“Clean”事件来删除复制的文件,而VisualStudio2008似乎没有在项目属性页面中提供选项

它有:

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

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

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

不幸的是,没有文档化的方法插入自定义清理步骤。您可以在预构建事件中清理输出,但在清理之后仍然会留下工件

以下是MSDN中各个构建步骤的调用顺序:

  • 预构建事件
  • 单个文件上的自定义生成步骤
  • 代理生成器
  • 米德尔
  • 资源编译器
  • C/C++编译器
  • 链接前事件
  • 链接器或图书管理员(视情况而定)
  • BSCMake
  • 项目上的自定义生成步骤
  • 部署工具
  • 生成后事件

    MSDN:


  • $(ProjectDir)\deployment\*.


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

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

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


    自定义目标的完整列表如下。

    其他目标并没有完全按照我的要求执行,我只是找到了更好的方法。在VS2010中测试C++的Win32项目,转到ProjtProjtProtojy:>配置属性>自定义生成安装。您可以添加自定义命令行,并告诉VS在之前或之后执行该命令的操作。

    如果使用“项目属性-->配置属性-->自定义生成设置”,则必须记住填写“输出”字段,否则该字段将不会运行

    发件人:


    Outputs属性是以分号分隔的文件列表,必须列出在执行自定义生成步骤时生成的任何文件。如果将Outputs属性保留为空,则自定义生成步骤将永远不会执行,因为MSBuild将确定没有输出过期。如果您的步骤没有生成文件,但仍希望在每次生成时都执行该步骤,则可以使用伪造文件名,因为该文件永远不存在,并且MSBuild将始终确定自定义生成步骤已过期。“

    Scott-您能详细说明如何添加“AfterClean”吗“target?你是说.vsproj-而不是.csproj?给了我一个想法:在预构建中编写清理脚本,将后构建设置为仅在成功构建时运行,并故意在代码中编写一个基本语法错误。Build(预构建完成自定义工作。)Clean Project(正常清理)。该功能似乎不适用于Clean事件。还有其他清理事件,如CppClean、CoreClean和其他。我没有时间全部尝试。可能是我弄错了。旁注:也可以在记事本[++]中编辑.csproj文件,然后在保存时,Visual Studio会检测到该文件以重新加载项目。对于多次不断的尝试和错误,这会更快一些。但是没有智能感知。问题被标记为[c++]和[visual-c++],这意味着他将拥有
    .vcproj
    文件,而不是
    .csproj
    文件。文件格式似乎不同上述链接似乎已断开&没有waybackmachine条目。不知道最初的链接实际上是什么,但这两个MSDoc引用似乎列出了所有构建过程目标:这对我来说不起作用。我无法使用VS 2012指定完整路径或相对路径。一旦我发现它是相对于中间目录的,它就可以在Visual 2013 Express中工作,因此必须使用$(OutDir)删除输出目录中的文件。
      <Target Name="AfterClean">
        <Delete Files="$(OutDir)\$(TargetName).exe" ContinueOnError="true" />
      </Target>