生成后事件始终在MSBUILD VS2013中运行

迈克尔·亨森

与该问题非常相似,除了问题外,我在为VS2013修复它后,MSBUILD上存在该问题。即使编译器和链接器认为项目是最新的,构建后事件也正在运行。

关于如何防止构建后事件在此处运行的任何想法?

1>Project "D:\XXX\XXX\XXX\XXX.vcxproj" on node 1 (default targets).

1>InitializeBuildStatus:
  Creating ".\..\XXX\XXX\XXX\XXX.39DEE505.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.\

ClCompile:
  All outputs are up-to-date.
  All outputs are up-to-date.
ResourceCompile:
  All outputs are up-to-date.
Link:
  All outputs are up-to-date.
  WpnSiteOverlayManager.vcxproj -> D:\XXX\XXX\XXX\XXX\..\bin\Release\XXX.dll
PostBuildEvent:
  "..\..\..\Components\DevTools\Build\BuildCommand.exe" /p "..\..\..\Products" "D:\XXX
  ....
  buildcommand completed successfully
FinalizeBuildStatus:
  Deleting file ".\..\intermediate\release\XXX\XXX.39DEE505.tlog\unsuccessfulbuild".
  Touching ".\..\intermediate\release\XXX\XXX.39DEE505.tlog\XXX.lastbuildstate".
1>Done Building Project "D:\XXX\XXX\XXX\XXX.vcxproj" (default targets).
斯蒂金

此功能内置在MsBuild for .Net项目中(在Microsoft.Common.Targets中搜索PostBuildEvent,也请参见此处),这是简化版本。原则是在构建之前获得输出文件的时间戳,在构建之后获得另一个时间戳,然后进行比较。如果它们相同,则显然没有真正构建任何东西。这个逻辑有很多可能的插入点,在这里我刚刚选择了链接阶段,它应该做得很好:

<Target Name="GetTimeStampBeforeLink" BeforeTargets="Link">
  <ItemGroup>
    <ProjectOutputFiles Include="$(TargetPath)" />
  </ItemGroup>
  <PropertyGroup>
    <OutputTimeStampBeforeLink>%(ProjectOutputFiles.ModifiedTime)</OutputTimeStampBeforeLink>
  </PropertyGroup>
</Target>

<Target Name="GetTimeStampAfterLink" AfterTargets="Link">
  <PropertyGroup>
    <OutputTimeStampAfterLink>%(ProjectOutputFiles.ModifiedTime)</OutputTimeStampAfterLink>
    <OutputFilesModified Condition="'$(OutputTimeStampBeforeLink)' != '$(OutputTimeStampAfterLink)'">True</OutputFilesModified>
  </PropertyGroup>
</Target>

您可以将此代码直接插入到项目文件中,但是更好的主意是将其保存在单独的文件中,以便将其导入到其他项目中,从而可以通过将其导入到任何位置来重复使用。您也可以通过添加到ProjectOutputFilesItemGroup来添加要检查的文件

现在剩下的就是禁用PostBuildEvent。MsBuild已经有了一种机制,因为后构建事件的调用取决于名为的PostBuildEventUseInBuild属性,因此如果未修改输出文件,则将其设置为false:

<Target Name="DisablePostBuildEvent" AfterTargets="GetTimeStampAfterLink">
  <PropertyGroup>
    <PostBuildEventUseInBuild Condition='"$(OutputFilesModified)' != 'True'">false</PostBuildEventUseInBuild>
  </PropertyGroup>
</Target>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Visual Studio 2013生成后事件始终显示资源管理器

来自分类Dev

VS2013中的MOC文件生成

来自分类Dev

重命名VS2013中生成的DLL文件

来自分类Dev

在生成后事件中调用csc.exe

来自分类Dev

Visual Studio生成项目并在生成后事件上运行

来自分类Dev

Visual Studio 2015-仅在从GUI生成时才运行生成后事件

来自分类Dev

vs2013更新通知的Azure SDK 2.5.1始终存在

来自分类Dev

VS2013始终链接到1.55.0 Boost库

来自分类Dev

在Visual Studio生成后事件中删除整个文件夹

来自分类Dev

无法在生成后事件命令行中执行.bat文件

来自分类Dev

VS2013标签文本屏幕从variablechanged引发的事件更新

来自分类Dev

VS2013标签文本屏幕从variablechanged引发的事件更新

来自分类Dev

无法在CppUnitTestFramework(VS2013)中运行测试

来自分类Dev

无法在CppUnitTestFramework(VS2013)中运行测试

来自分类Dev

VS2013数据库项目无法生成

来自分类Dev

VS2013数据库项目,不生成dll

来自分类Dev

生成VS2013构建时缺少CMake安装目标

来自分类Dev

VS2013 devenv命令行生成错误/挂起

来自分类Dev

VS2013为什么不生成附属程序集?

来自分类Dev

生成VS2013构建时缺少CMake安装目标

来自分类Dev

在VS2013中从SVN进行更新后,数据集Designer.cs生成Designer1.cs

来自分类Dev

如何在VS2013生成的ASP.NET网站中覆盖导航栏颜色?

来自分类Dev

为什么Visual Studio中的所有预生成或生成后事件都失败,退出代码为1?

来自分类Dev

对于我在Visual Studio 2013中的类库项目;使用生成后事件如何将创建的dll复制到另一个路径?

来自分类Dev

MSTest运行忽略的测试(VS2013)

来自分类Dev

Visual Studio 生成后事件

来自分类Dev

从VS2010迁移到VS2013后生成警告

来自分类Dev

VS 2013脚手架中的“运行所选代码生成器时出错”

来自分类Dev

包含TypeScript的解决方案始终使用VS2013进行永久加载

Related 相关文章

  1. 1

    Visual Studio 2013生成后事件始终显示资源管理器

  2. 2

    VS2013中的MOC文件生成

  3. 3

    重命名VS2013中生成的DLL文件

  4. 4

    在生成后事件中调用csc.exe

  5. 5

    Visual Studio生成项目并在生成后事件上运行

  6. 6

    Visual Studio 2015-仅在从GUI生成时才运行生成后事件

  7. 7

    vs2013更新通知的Azure SDK 2.5.1始终存在

  8. 8

    VS2013始终链接到1.55.0 Boost库

  9. 9

    在Visual Studio生成后事件中删除整个文件夹

  10. 10

    无法在生成后事件命令行中执行.bat文件

  11. 11

    VS2013标签文本屏幕从variablechanged引发的事件更新

  12. 12

    VS2013标签文本屏幕从variablechanged引发的事件更新

  13. 13

    无法在CppUnitTestFramework(VS2013)中运行测试

  14. 14

    无法在CppUnitTestFramework(VS2013)中运行测试

  15. 15

    VS2013数据库项目无法生成

  16. 16

    VS2013数据库项目,不生成dll

  17. 17

    生成VS2013构建时缺少CMake安装目标

  18. 18

    VS2013 devenv命令行生成错误/挂起

  19. 19

    VS2013为什么不生成附属程序集?

  20. 20

    生成VS2013构建时缺少CMake安装目标

  21. 21

    在VS2013中从SVN进行更新后,数据集Designer.cs生成Designer1.cs

  22. 22

    如何在VS2013生成的ASP.NET网站中覆盖导航栏颜色?

  23. 23

    为什么Visual Studio中的所有预生成或生成后事件都失败,退出代码为1?

  24. 24

    对于我在Visual Studio 2013中的类库项目;使用生成后事件如何将创建的dll复制到另一个路径?

  25. 25

    MSTest运行忽略的测试(VS2013)

  26. 26

    Visual Studio 生成后事件

  27. 27

    从VS2010迁移到VS2013后生成警告

  28. 28

    VS 2013脚手架中的“运行所选代码生成器时出错”

  29. 29

    包含TypeScript的解决方案始终使用VS2013进行永久加载

热门标签

归档