Skip to content

Eliminate all "BeforeTargets" and "AfterTargets" from our own MSBuild targets #1128

Closed
@atsushieno

Description

@atsushieno

We must eliminate all "BeforeTargets" and "AfterTargets" from our own MSBuild targets. They are MSBuild anti-patterns that confuses developers by messing dependency tracking hard, and can be replaced by MSBuild properties like <BuildDependsOn>.

(In case you don't know why BeforeTargets and AfterTargets must be eliminated read this post http://sedodream.com/2013/02/12/MSBuildDependsOnTargetsVersusBeforeTargetsAfterTargets.aspx especially this: "I always use DependsOnTargets unless there is a solid reason why I should chose to use Before/AfterTargets.")

Here is the list of current BeforeTargets usage

/sources/xamarin-android$ grep -R BeforeTargets | grep -v bin/Release | grep -v bin/Debug | grep -v external/mono | grep BeforeTargets
build-tools/create-vsix/create-vsix.targets:      BeforeTargets="VSIXContainerProjectOutputGroup;CreateVsixContainer"
build-tools/create-vsix/create-vsix.targets:      BeforeTargets="Build"
build-tools/create-vsix/create-vsix.targets:      BeforeTargets="GeneratePkgDef;VSCTCompile;VSIXNameProjectOutputGroup">
src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets:      BeforeTargets="CoreCompile"
src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets:      BeforeTargets="DeployOutputFiles"
src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets:      BeforeTargets="CoreCompile"
src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Common/ImportAfter/Xamarin.Android.Windows.targets:	<Target Name="_RegisterMdbFilesWithFileWrites" BeforeTargets="IncrementalClean">  
src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets:<Target Name="_SetLatestTargetFrameworkVersionForPackageReference" BeforeTargets="_GetRestoreTargetFrameworksOutput" DependsOnTargets="_SetLatestTargetFrameworkVersion">
src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs:<Target Name=""CustomTarget"" AfterTargets=""UpdateAndroidAssets"" BeforeTargets=""UpdateAndroidInterfaceProxies"" >
src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs:<Target Name=""_CheckAbis"" BeforeTargets=""_DefineBuildTargetAbis"">
src/Mono.Android/Test/Mono.Android-Tests.targets:      BeforeTargets="Build"
src/Mono.Android/Mono.Android.targets:      BeforeTargets="BeforeResolveReferences"
src/Mono.Android/Mono.Android.targets:      BeforeTargets="CoreCompile"
src/Mono.Android/Mono.Android.targets:      BeforeTargets="CoreCompile"
src/Mono.Android/Mono.Android.targets:      BeforeTargets="_GenerateBinding"
src/Mono.Android/Mono.Android.targets:      BeforeTargets="CoreCompile"
src/Mono.Android/Mono.Android.targets:      BeforeTargets="GetTargetFrameworkProperties;GetReferenceAssemblyPaths;ResolveReferences"
src/Mono.Android/Mono.Android.targets:      BeforeTargets="_GenerateFrameworkList"
external/Java.Interop/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.7/build/net45/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props:  <Target Name="IncludeRoslynCompilerFilesToFilesForPackagingFromProject" BeforeTargets="PrepareForRun" >
external/Java.Interop/external/cecil/Mono.Cecil.Tests.props:          BeforeTargets="GenerateBindingRedirects"
tests/Xamarin.Android.Bcl-Tests/Xamarin.Android.Bcl-Tests.targets:      BeforeTargets="ResolveAssemblyReferences">
tests/Xamarin.Android.Bcl-Tests/Xamarin.Android.Bcl-Tests.targets:      BeforeTargets="ResolveAssemblyReferences"

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions