diff --git a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets index f5b225179bb..d0943e16bb9 100644 --- a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets +++ b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets @@ -93,7 +93,7 @@ Copyright (C) 2016 Xamarin. All rights reserved. @@ -166,11 +166,11 @@ Copyright (C) 2016 Xamarin. All rights reserved. PreserveNewest - + - + diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets index 43ed246a334..51ed5880c64 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets @@ -10,9 +10,9 @@ true Xamarin.Android.Net.AndroidMessageHandler Xamarin.Android.Net.AndroidClientHandler - true - false true + true + false $(AndroidGenerateResourceDesigner) false false diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs index 062e7fadbca..2ded510c810 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs @@ -455,7 +455,54 @@ public void AppWithSingleJar () } [Test] - public void GenerateResourceDesigner_false() + public void GenerateResourceDesigner([Values (false, true)] bool generateResourceDesigner, [Values (false, true)] bool useDesignerAssembly) + { + var path = Path.Combine ("temp", TestName); + var libraryB = new XASdkProject (outputType: "Library") { + ProjectName = "LibraryB", + }; + libraryB.Sources.Clear (); + libraryB.Sources.Add (new BuildItem.Source ("Foo.cs") { + TextContent = () => @"namespace LibraryB; +public class Foo { + public static int foo => Resource.Drawable.foo; +}", + }); + libraryB.Sources.Add (new AndroidItem.AndroidResource (() => "Resources\\drawable\\foo.png") { + BinaryContent = () => XamarinAndroidCommonProject.icon_binary_mdpi, + }); + libraryB.SetProperty ("AndroidUseDesignerAssembly", useDesignerAssembly.ToString ()); + var libraryA = new XASdkProject (outputType: "Library") { + ProjectName = "LibraryA", + }; + libraryA.Sources.Clear (); + libraryA.Sources.Add (new BuildItem.Source ("FooA.cs") { + TextContent = () => @"namespace LibraryA; +public class FooA { + public int foo => 0; + public int foo2 => LibraryB.Foo.foo; + public int foo3 => LibraryB.Resource.Drawable.foo; +}", + }); + libraryA.AddReference (libraryB); + libraryA.SetProperty ("AndroidGenerateResourceDesigner", generateResourceDesigner.ToString ()); + if (!useDesignerAssembly) + libraryA.SetProperty ("AndroidUseDesignerAssembly", "False"); + var libraryBBuilder = CreateDotNetBuilder (libraryB, Path.Combine (path, libraryB.ProjectName)); + Assert.IsTrue (libraryBBuilder.Build (), "Build of LibraryB should succeed."); + var libraryABuilder = CreateDotNetBuilder (libraryA, Path.Combine (path, libraryA.ProjectName)); + Assert.IsTrue (libraryABuilder.Build (), "Build of LibraryA should succeed."); + var proj = new XASdkProject () { + ProjectName = "App1", + }; + proj.SetProperty ("AndroidUseDesignerAssembly", useDesignerAssembly.ToString ()); + proj.AddReference (libraryA); + var dotnet = CreateDotNetBuilder (proj, Path.Combine (path, proj.ProjectName)); + Assert.IsTrue (dotnet.Build (), "Build of Proj should succeed."); + } + + [Test] + public void GenerateResourceDesigner_false([Values (false, true)] bool useDesignerAssembly) { var proj = new XASdkProject (outputType: "Library") { Sources = { @@ -466,7 +513,8 @@ public void GenerateResourceDesigner_false() }; // Turn off Resource.designer.cs and remove usage of it proj.SetProperty ("AndroidGenerateResourceDesigner", "false"); - proj.SetProperty ("AndroidUseDesignerAssembly", "false"); + if (!useDesignerAssembly) + proj.SetProperty ("AndroidUseDesignerAssembly", "false"); proj.MainActivity = proj.DefaultMainActivity .Replace ("Resource.Layout.Main", "0") .Replace ("Resource.Id.myButton", "0"); @@ -475,11 +523,15 @@ public void GenerateResourceDesigner_false() Assert.IsTrue (dotnet.Build(target: "CoreCompile", parameters: new string[] { "BuildingInsideVisualStudio=true" }), "Designtime build should succeed."); var intermediate = Path.Combine (FullProjectDirectory, proj.IntermediateOutputPath); var resource_designer_cs = Path.Combine (intermediate, "designtime", "Resource.designer.cs"); + if (useDesignerAssembly) + resource_designer_cs = Path.Combine (intermediate, "__Microsoft.Android.Resource.Designer.cs"); FileAssert.DoesNotExist (resource_designer_cs); Assert.IsTrue (dotnet.Build (), "build should succeed"); - resource_designer_cs = Path.Combine (intermediate, "Resource.designer.cs"); + resource_designer_cs = Path.Combine (intermediate, "Resource.designer.cs"); + if (useDesignerAssembly) + resource_designer_cs = Path.Combine (intermediate, "__Microsoft.Android.Resource.Designer.cs"); FileAssert.DoesNotExist (resource_designer_cs); var assemblyPath = Path.Combine (FullProjectDirectory, proj.OutputPath, $"{proj.ProjectName}.dll");