diff --git a/.gitignore b/.gitignore
index 26eeca75a65..22b42ec9a97 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,4 +18,5 @@ Resource.designer.cs
logcat-*.txt
apk-sizes-*.txt
*.rawproto
+*.binlog
src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.props
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs
index 3f24b141706..11e173102a8 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs
@@ -120,6 +120,43 @@ public void FooMethod () {
}
}
+ [Test]
+ public void SwitchBetweenDesignTimeBuild ()
+ {
+ var proj = new XamarinAndroidApplicationProject ();
+
+ using (var b = CreateApkBuilder (Path.Combine ("temp", TestName))) {
+ Assert.IsTrue (b.Build (proj), "first *regular* build should have succeeded.");
+ var build_props = b.Output.GetIntermediaryPath ("build.props");
+ var designtime_build_props = b.Output.GetIntermediaryPath (Path.Combine ("designtime", "build.props"));
+ FileAssert.Exists (build_props, "build.props should exist after a first `Build`.");
+ FileAssert.DoesNotExist (designtime_build_props, "designtime/build.props should *not* exist after a first `Build`.");
+
+ b.Target = "Compile";
+ Assert.IsTrue (b.Build (proj, parameters: new [] { "DesignTimeBuild=True" }), "first design-time build should have succeeded.");
+ FileAssert.Exists (build_props, "build.props should exist after a design-time build.");
+ FileAssert.Exists (designtime_build_props, "designtime/build.props should exist after a design-time build.");
+
+ b.Target = "Build";
+ Assert.IsTrue (b.Build (proj), "second *regular* build should have succeeded.");
+ FileAssert.Exists (build_props, "build.props should exist after the second `Build`.");
+ FileAssert.Exists (designtime_build_props, "designtime/build.props should exist after the second `Build`.");
+
+ //NOTE: none of these targets should run, since we have not actually changed anything!
+ Assert.IsTrue (b.Output.IsTargetSkipped ("_UpdateAndroidResgen"), "`_UpdateAndroidResgen` should be skipped!");
+ //TODO: We would like for this assertion to work, but the item group changes between DTB and regular builds
+ // $(IntermediateOutputPath)designtime\Resource.designer.cs -> Resources\Resource.designer.cs
+ // And so the built assembly changes between DTB and regular build, triggering `_LinkAssembliesNoShrink`
+ //Assert.IsTrue (b.Output.IsTargetSkipped ("_LinkAssembliesNoShrink"), "`_LinkAssembliesNoShrink` should be skipped!");
+
+ b.Target = "Clean";
+ Assert.IsTrue (b.Build (proj), "clean should have succeeded.");
+
+ FileAssert.DoesNotExist (build_props, "build.props should *not* exist after `Clean`.");
+ FileAssert.Exists (designtime_build_props, "designtime/build.props should exist after `Clean`.");
+ }
+ }
+
[Test]
public void BuildPropsBreaksConvertResourcesCases ()
{
diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
index f0f619b900e..73718fda1e8 100755
--- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
+++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
@@ -274,6 +274,7 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved.
<_AndroidProguardInputJarFilter>(!META-INF/MANIFEST.MF)
<_AndroidAapt2VersionFile>$(IntermediateOutputPath)aapt2.version
<_AndroidNuGetStampFile>$(IntermediateOutputPath)$(MSBuildProjectName).nuget.stamp
+ <_AndroidIntermediateDesignTimeBuildDirectory>$(IntermediateOutputPath)designtime\
$(EnableProguard)
@@ -305,6 +306,7 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved.
<_AndroidSequencePointsMode Condition=" '$(_AndroidSequencePointsMode)' == ''">None
<_InstantRunEnabled Condition=" '$(_InstantRunEnabled)' == '' ">False
<_AndroidBuildPropertiesCache>$(IntermediateOutputPath)build.props
+ <_AndroidDesignTimeBuildPropertiesCache>$(_AndroidIntermediateDesignTimeBuildDirectory)build.props
False
@@ -426,8 +428,9 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved.
<_AndroidResourcePathsCache Condition=" '$(DesignTimeBuild)' == 'true' And !Exists ('$(_AndroidResourcePathsCache)') ">$(_AndroidResourcePathsDesignTimeCache)
<_AndroidLibraryImportsCache Condition=" '$(DesignTimeBuild)' == 'true' And !Exists ('$(_AndroidLibraryImportsCache)') ">$(_AndroidLibraryImportsDesignTimeCache)
<_AndroidLibraryProjectImportsCache Condition=" '$(DesignTimeBuild)' == 'true' And !Exists ('$(_AndroidLibraryProjectImportsCache)') ">$(_AndroidLibraryProjectImportsDesignTimeCache)
+ <_AndroidBuildPropertiesCache Condition=" '$(DesignTimeBuild)' == 'true' ">$(_AndroidDesignTimeBuildPropertiesCache)
-
+
@@ -1147,11 +1150,10 @@ because xbuild doesn't support framework reference assemblies.
<_AndroidStaticResourcesFlag>$(IntermediateOutputPath)static.flag
<_AndroidResourcesCacheFile>$(IntermediateOutputPath)mergeresources.cache
True
- <_AndroidDesignTimeResDirIntermediate>$(IntermediateOutputPath)designtime\
- <_AndroidResourcePathsDesignTimeCache>$(_AndroidDesignTimeResDirIntermediate)resourcepaths.cache
- <_AndroidLibraryImportsDesignTimeCache>$(_AndroidDesignTimeResDirIntermediate)libraryimports.cache
- <_AndroidLibraryProjectImportsDesignTimeCache>$(_AndroidDesignTimeResDirIntermediate)libraryprojectimports.cache
- <_AndroidManagedResourceDesignerFile>$(_AndroidDesignTimeResDirIntermediate)$(_AndroidResourceDesigner)
+ <_AndroidResourcePathsDesignTimeCache>$(_AndroidIntermediateDesignTimeBuildDirectory)resourcepaths.cache
+ <_AndroidLibraryImportsDesignTimeCache>$(_AndroidIntermediateDesignTimeBuildDirectory)libraryimports.cache
+ <_AndroidLibraryProjectImportsDesignTimeCache>$(_AndroidIntermediateDesignTimeBuildDirectory)libraryprojectimports.cache
+ <_AndroidManagedResourceDesignerFile>$(_AndroidIntermediateDesignTimeBuildDirectory)$(_AndroidResourceDesigner)
@@ -1216,7 +1218,7 @@ because xbuild doesn't support framework reference assemblies.
Inputs="$(_ManagedUpdateAndroidResgenInputs);$(_AndroidResourcePathsCache);$(_AndroidLibraryProjectImportsCache);$(_AndroidLibraryImportsCache);"
Outputs="$(_AndroidManagedResourceDesignerFile)"
DependsOnTargets="_CreatePropertiesCache;_ExtractLibraryProjectImports;_CreateAdditionalResourceCache">
-
+
-
+