Paul Alexander
Paul Alexander

Reputation: 32367

How do you call an overridden MSBuild target

In MSBuild you can override a <Target /> from another file in your own. For example the AfterBuild target included in Microsoft.Common.targets file simply by defining your own Target with the same name:

<Target Name="AfterBuild">
    <!-- Do something different -->
</TargetName>

You'll see a note like this:

Overriding target "AfterBuild" in project "C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets" with target "AfterBuild" from project "XXXXX".

Is there any way to call the original AfterBuild target?

I'd like to do this to instrument certain complex default Targets and then execute the original behavior. Many targets like Build expose a BuildDependsOn property that can be used for this. Many others do not - and I'd like to override them without completely duplicating their content.

Upvotes: 12

Views: 3193

Answers (2)

Kjara
Kjara

Reputation: 2902

I'd like to do this to instrument certain complex default Targets and then execute the original behavior. Many targets like Build expose a BuildDependsOn property that can be used for this. Many others do not - and I'd like to override them without completely duplicating their content.

If you want to first run something custom on a target and then run the original target, why not just use BeforeTargets?

So instead of

<Target Name="AfterBuild">
    <!-- custom AfterBuild overriding default AfterBuild -->
</TargetName>

just use

<Target Name="JustBefore_AfterBuild" BeforeTargets="AfterBuild">
    <!-- custom AfterBuild just before default AfterBuild -->
</TargetName>

Upvotes: 0

Sayed Ibrahim Hashimi
Sayed Ibrahim Hashimi

Reputation: 44332

When an MSBuild script is processed it will also process the imported files. The result will be a single in memory canonical representation of the entire script. When a target is encountered that already exists the previous definition is discarded, therefore it is not possible to call the original target.

Upvotes: 15

Related Questions