我已将以下AfterBuild
任务添加到.vcxproj
文件中:
<Target Name="AfterBuild">
<Message Text="Hi" Importance="high" />
</Target>
它似乎仅在构建C ++代码时运行(或者如果我进行重建):
1>------ Rebuild All started: Project: ConsoleApplication1, Configuration: Debug Win32 ------
1> stdafx.cpp
1> SomeClass.cpp
1> ConsoleApplication1.vcxproj ->
1> Hi
D:\Projects\CppTest\Debug\ConsoleApplication1.lib
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
当C ++代码是最新的时,它不会运行:
========== Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========
如何让它始终运行?我正在使用Visual Studio 2015。
答案 0 :(得分:4)
该行
========== Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========
表示Visual Studio根本没有运行MSBuild。
对于增量构建,VS使用File Tracker拦截由编译器和链接器执行的文件操作。结果可以在 ProjName .tlog文件夹中找到。在后续版本中,VS会检查.read和.write文件中列出的文件的日期,并决定是否运行MSBuild。该特征描述于Hashimi S.,Bartholomew S.- Using MSBuild,2nd Edition-2013,&#34; File Tracker&#34;章。
一些可能的解决方案:
答案 1 :(得分:1)
我通过在.vcxproj
文件中添加以下行来解决此问题:
<PropertyGroup>
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
</PropertyGroup>
似乎强制IDE实际运行MSBuild。
我在Visual Studio 2015中对其进行了测试。将相同的行添加到导入的.targets
文件中没有帮助。
答案 2 :(得分:0)
有一个设置&#34;运行构建后事件:&#34;在Visual Studio中的项目属性中,您需要将其设置为:&#34;始终&#34;使后期构建事件始终运行。
我想它现在已经设置为&#34;成功构建&#34;。
答案 3 :(得分:0)
使用详细日志记录(/ v:详细信息或/ v:diag)构建项目并查找最后运行但在两种情况下都存在的目标(假设它是一个组成目标“FinalCleanup”),然后挂钩你的帖子 - 像这样构建目标而不是特殊名称
<Target Name="RunMyLastTarget" AfterTargets="FinalCleanup">
<Message Text="Hi" Importance="high" />
</Target>
答案 4 :(得分:0)
我终于和Custom Build Step
一起去了。为确保它始终运行,我将Outputs
字段设置为某个虚拟文件路径。由于虚拟文件路径从不存在,Custom Build Step
始终运行。这很糟糕,但它完成了工作。