Closed
Description
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"