Requires a project with the following
...
<Target Name="BeforeBuild">
<Message Text="Some message." />
</Target>
...
Then
dotnet restore
dotnet build
I expect the BeforeBuild
target to be executed. Even adding BeforeTargets="Build"
doesn't work. Similarly for AfterBuild
/DependsOnTargets="Build"
.
The target isn't run.
dotnet --info
output:
.NET Command Line Tools (1.0.0-rc4-004771)
Product Information:
Version: 1.0.0-rc4-004771
Commit SHA-1 hash: 4228198f0e
Runtime Environment:
OS Name: ubuntu
OS Version: 14.04
OS Platform: Linux
RID: ubuntu.14.04-x64
Base Path: /usr/share/dotnet/sdk/1.0.0-rc4-004771
Try this:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.4</TargetFramework>
</PropertyGroup>
<Target Name="Foo"
AfterTargets="Build">
<Message Text="Bar" Importance="High" />
</Target>
</Project>
The .NET Core SDK is not, AFAIK, bringing forward the BeforeBuild
/AfterBuild
extensibility model since the same behavior can be provided by MSBuild's BeforeTargets
/AfterTargets
attributes, as exemplified above.
Re-opening because the behavior here is still odd.
If I use <Target Name="Foo" BeforeTargets="Build">
like you suggest, it works as expected, but if I name the target BeforeBuild
, the it's _not_ executed, so it appears that there is some (incomplete?) switching on the target name.
@brettfo can you please move this issue to the microsoft/msbuild repo? particularly this last piece about this not working depending on the target name.
Issue appears to already exist at Microsoft/MSBuild#1680.
This one is also interesting: https://github.com/microsoft/msbuild/issues/1680#issuecomment-468710590
While <BeforeBuild>
and <AfterBuild>
do not work, oddly, these work fine:
<Target Name="CustomBeforeBuild" BeforeTargets="BeforeBuild" />
<Target Name="CustomAfterBuild" AfterTargets="AfterBuild" />
Most helpful comment
Try this:
The .NET Core SDK is not, AFAIK, bringing forward the
BeforeBuild
/AfterBuild
extensibility model since the same behavior can be provided by MSBuild'sBeforeTargets
/AfterTargets
attributes, as exemplified above.