Reputation: 305
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):
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) ?
Upvotes: 1
Views: 849
Reputation: 5143
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.
Upvotes: 2