An alternative is to use the AfterTargets attribute on the Target. Something like:
<Target Name="TestTarget" AfterTargets="Build">
<Message Importance="High" Text="This is a test" />
</Target>
I’m not sure why “AfterBuild” wouldn’t work any more, but this appears to be a conscious decision by the maintainers of MSBuild (h/t to Livven on pointing me to this github issue). “AfterBuild” was a special name that was used by the Build target. The current version of Microsoft.Common.CurrentVersion.targets
still has it:
<PropertyGroup>
<BuildDependsOn>
BeforeBuild;
CoreBuild;
AfterBuild
</BuildDependsOn>
</PropertyGroup>
<Target
Name="Build"
Condition=" '$(_InvalidConfigurationWarning)' != 'true' "
DependsOnTargets="$(BuildDependsOn)"
Returns="$(TargetPath)" />
<!--