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 8d19b2128da..f5b225179bb 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 @@ -20,6 +20,7 @@ Copyright (C) 2016 Xamarin. All rights reserved. + False @@ -142,15 +143,7 @@ Copyright (C) 2016 Xamarin. All rights reserved. - - <_ErrorItems Include="@(_MonoAndroidReferencePath)" Condition=" '%(_MonoAndroidReferencePath.HasResourceDesignerAssemblyReference)' == 'True' "/> - <_ErrorItems Include="@(_MonoAndroidReferenceDependencyPaths)" Condition=" '%(_MonoAndroidReferenceDependencyPaths.HasResourceDesignerAssemblyReference)' == 'True' "/> - - + diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/AppendCustomMetadataToItemGroup.cs b/src/Xamarin.Android.Build.Tasks/Tasks/AppendCustomMetadataToItemGroup.cs index 9ab1d323596..ffd28e90201 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/AppendCustomMetadataToItemGroup.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/AppendCustomMetadataToItemGroup.cs @@ -35,11 +35,6 @@ public override bool RunTask () foreach (var item in Inputs) { var fn = Path.GetFileNameWithoutExtension (item.ItemSpec); output.Add (item); - var md = item.GetMetadata ("HasResourceDesignerAssemblyReference"); - if (string.IsNullOrEmpty (md)) { - var b = MonoAndroidHelper.HasResourceDesignerAssemblyReference (item); - item.SetMetadata ("HasResourceDesignerAssemblyReference", MonoAndroidHelper.HasResourceDesignerAssemblyReference (item).ToString ()); - } List metaDataList; if (!metaData.TryGetValue (fn, out metaDataList)) continue; diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/CheckForInvalidDesignerConfig.cs b/src/Xamarin.Android.Build.Tasks/Tasks/CheckForInvalidDesignerConfig.cs new file mode 100644 index 00000000000..cd589a58251 --- /dev/null +++ b/src/Xamarin.Android.Build.Tasks/Tasks/CheckForInvalidDesignerConfig.cs @@ -0,0 +1,56 @@ +using Microsoft.Android.Build.Tasks; +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; +using System.Reflection.Metadata; +using System.Reflection.PortableExecutable; +using System.IO; + +namespace Xamarin.Android.Tasks +{ + /// + /// Emits XA1034 is an assembly has a reference to _Microsoft.Android.Resource.Designer.dll + /// * NOTE: only called when $(AndroidUseDesignerAssembly) is false + /// + public class CheckForInvalidDesignerConfig : AndroidTask + { + public override string TaskPrefix => "CIRF"; + + public ITaskItem[] Assemblies { get; set; } + + public override bool RunTask () + { + if (Assemblies == null) + return true; + + foreach (var assembly in Assemblies) { + if (HasResourceDesignerAssemblyReference (assembly)) { + Log.LogCodedError ("XA1034", Properties.Resources.XA1034, assembly); + } + } + + return !Log.HasLoggedErrors; + } + + static bool HasResourceDesignerAssemblyReference (ITaskItem assembly) + { + if (!File.Exists (assembly.ItemSpec)) { + return false; + } + using var pe = new PEReader (File.OpenRead (assembly.ItemSpec)); + var reader = pe.GetMetadataReader (); + return HasResourceDesignerAssemblyReference (reader); + } + + static bool HasResourceDesignerAssemblyReference (MetadataReader reader) + { + foreach (var handle in reader.AssemblyReferences) { + var reference = reader.GetAssemblyReference (handle); + var name = reader.GetString (reference.Name); + if (string.CompareOrdinal (name, "_Microsoft.Android.Resource.Designer") == 0) { + return true; + } + } + return false; + } + } +} \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs index 19088a10f6b..acd5230b39b 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs @@ -325,28 +325,6 @@ public static bool HasMonoAndroidReference (MetadataReader reader) return false; } - public static bool HasResourceDesignerAssemblyReference (ITaskItem assembly) - { - if (!File.Exists (assembly.ItemSpec)) { - return false; - } - using var pe = new PEReader (File.OpenRead (assembly.ItemSpec)); - var reader = pe.GetMetadataReader (); - return HasResourceDesignerAssemblyReference (reader); - } - - public static bool HasResourceDesignerAssemblyReference (MetadataReader reader) - { - foreach (var handle in reader.AssemblyReferences) { - var reference = reader.GetAssemblyReference (handle); - var name = reader.GetString (reference.Name); - if (string.CompareOrdinal (name, "_Microsoft.Android.Resource.Designer") == 0) { - return true; - } - } - return false; - } - public static bool IsReferenceAssembly (string assembly) { using (var stream = File.OpenRead (assembly))