According to this Microsoft's documentation, for each project in a Visual Studio 2019 solution, build events run in the following order with other build steps (including custom build steps and tools):
- Pre-Build event
- Custom build tools on individual files
- MIDL
- Resource compiler
- The C/C compiler
- Pre-Link event
- Linker or Librarian (as appropriate)
- Manifest Tool
- BSCMake
- Custom build step on the project
- Post-Build event
The custom build step on the project and a post-build event run sequentially after all other build processes finish.
However, when the WDK v10.0.19041.0 is installed, the StampInf and InfVerif are executed before the Pre-Build Event.
This is evidenced by the following Microsoft's code:
<Target Name="StampInf"
Condition="'@(Inf)' != ''"
BeforeTargets="InfVerif">
...
<Target Name="InfVerif"
Condition="'@(Inf)' != '' and '$(IsDriverAppToolset)' != 'true'"
AfterTargets="StampInf"
BeforeTargets="PreBuildEvent">
The Microsoft's code above is excerpted from:
C:\Program Files (x86)\Windows Kits\10\build\WindowsDriver.Common.targets
Notice, how the AfterTargets and BeforeTargets directives establish the order of execution of StampInf, InfVerify and PreBuildEvent.
Question 1: Is the execution of StampInf and InfVerify before the Pre-Build Event a bug in implementation or an error in Microsoft's documentation ?
Question 2: How to execute a custom command before InfVerif in a portable manner (without modifying Microsoft's source files of the Visual Studio or the WDK) ?
CodePudding user response:
Seems like a bug that InfVerif is implemented to explicitly reference being before the PreBuildEvent target. The WDK shouldn't be interfering with the semantics of PreBuildEvent.
However, MSBuild will ignore a reference to a target that doesn't exist in the current project. You can set your target to be BeforeTargets="PreBuildEvent;InfVerif;StampInf" and for projects that don't have an InfVerif or StampInf target there should not be an error. You don't need to modify Microsoft's MSBuild code to get around this issue.
