From cd279c2bae266461ef73783d9934ecfa8acea5db Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Wed, 14 Feb 2018 15:42:12 +0000 Subject: [PATCH 1/2] [Xamarin.Android.Build.Tasks] Stop designtime designer being deleted. Fixes #1286 We have a number of problems with our DesignTime build system. The main one which this PR addresses is the designer file is deleted by `IncrementalClean` AND `CoreClean`. This them completely messes up the DesignTime system since it can no longer find the file. So what we should be doing is making sure we don't tell the build system about the designer file ;). We do this by not writing the path to the `$(CleanFile)`. --- .../ImportAfter/Xamarin.Android.Windows.targets | 2 +- .../AndroidUpdateResourcesTest.cs | 6 +++--- .../Xamarin.Android.Common.targets | 5 ----- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Common/ImportAfter/Xamarin.Android.Windows.targets b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Common/ImportAfter/Xamarin.Android.Windows.targets index 7b16e67727c..623dda9c056 100644 --- a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Common/ImportAfter/Xamarin.Android.Windows.targets +++ b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Common/ImportAfter/Xamarin.Android.Windows.targets @@ -15,7 +15,7 @@ Copyright (C) 2014 Xamarin. All rights reserved. - + - From 75b8e7852ed043ef58af0185dc473cbc6468e0cd Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Wed, 14 Feb 2018 21:29:53 +0000 Subject: [PATCH 2/2] Updated unit test --- .../IncrementalBuildTest.cs | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs index e3f81e71919..0ff5e01d6b6 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs @@ -12,6 +12,47 @@ namespace Xamarin.Android.Build.Tests [Parallelizable (ParallelScope.Children)] public class IncrementalBuildTest : BaseTest { + [Test] + public void IncrementalCleanDuringClean () + { + var path = Path.Combine ("temp", TestName); + var proj = new XamarinAndroidApplicationProject () { + ProjectName = "App1", + IsRelease = true, + }; + proj.SetProperty ("AndroidUseManagedDesignTimeResourceGenerator", "True"); + proj.SetProperty ("BuildingInsideVisualStudio", "True"); + using (var b = CreateApkBuilder (path)) { + b.Target = "Compile"; + Assert.IsTrue(b.Build (proj), "DesignTime Build should have succeeded"); + var designTimeDesigner = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "designtime", "Resource.designer.cs"); + FileAssert.Exists (designTimeDesigner, $"{designTimeDesigner} should have been created."); + b.Target = "Build"; + Assert.IsTrue(b.Build (proj), "Build should have succeeded"); + FileAssert.Exists (designTimeDesigner, $"{designTimeDesigner} should still exist after Build."); + b.Target = "Clean"; + Assert.IsTrue(b.Build (proj), "Clean should have succeeded"); + FileAssert.Exists (designTimeDesigner, $"{designTimeDesigner} should still exist after Clean."); + b.Target = "Compile"; + Assert.IsTrue(b.Build (proj), "Build should have succeeded"); + FileAssert.Exists (designTimeDesigner, $"{designTimeDesigner} should still exist after Compile."); + b.Target = "Build"; + Assert.IsTrue(b.Build (proj), "Build should have succeeded"); + FileAssert.Exists (designTimeDesigner, $"{designTimeDesigner} should still exist after second Build."); + Assert.IsTrue(b.Build (proj), "Build should have succeeded"); + FileAssert.Exists (designTimeDesigner, $"{designTimeDesigner} should still exist after third Build."); + b.Target = "Compile"; + Assert.IsTrue(b.Build (proj), "Build should have succeeded"); + FileAssert.Exists (designTimeDesigner, $"{designTimeDesigner} should still exist after second Compile."); + b.Target = "Clean"; + Assert.IsTrue(b.Build (proj), "Clean should have succeeded"); + FileAssert.Exists (designTimeDesigner, $"{designTimeDesigner} should still exist after second Clean."); + b.Target = "ReBuild"; + Assert.IsTrue(b.Build (proj), "ReBuild should have succeeded"); + FileAssert.Exists (designTimeDesigner, $"{designTimeDesigner} should still exist after ReBuild."); + } + + } [Test] public void LibraryIncrementalBuild () {