diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateResourceDesignerAssembly.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateResourceDesignerAssembly.cs index d1f165c4d47..4f61d5d6d00 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateResourceDesignerAssembly.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateResourceDesignerAssembly.cs @@ -123,6 +123,12 @@ bool Run (DirectoryAssemblyResolver res) TypeReference e = ImportType ("System.ComponentModel.EditorBrowsableState", module, netstandardDef.MainModule); var editorBrowserAttr = new CustomAttribute (editorBrowserConstructor); editorBrowserAttr.ConstructorArguments.Add (new CustomAttributeArgument (e, System.ComponentModel.EditorBrowsableState.Never)); + + MethodReference generatedCodeConstructor = ImportCustomAttributeConstructor (cache, "System.CodeDom.Compiler.GeneratedCodeAttribute", module, netstandardDef.MainModule, argCount: 2); + var generatedCodeAttr = new CustomAttribute (generatedCodeConstructor); + generatedCodeAttr.ConstructorArguments.Add (new CustomAttributeArgument (module.TypeSystem.String, nameof(GenerateResourceDesignerAssembly))); + var version = typeof(GenerateResourceDesignerAssembly).Assembly.GetName().Version; + generatedCodeAttr.ConstructorArguments.Add (new CustomAttributeArgument (module.TypeSystem.String, version.ToString ())); var att = TypeAttributes.AutoClass | TypeAttributes.AnsiClass | TypeAttributes.Public | TypeAttributes.BeforeFieldInit; @@ -139,6 +145,7 @@ bool Run (DirectoryAssemblyResolver res) ); CreateCtor (cache, resourceDesigner, module); resourceDesigner.CustomAttributes.Add (editorBrowserAttr); + resourceDesigner.CustomAttributes.Add (generatedCodeAttr); module.Types.Add (resourceDesigner); TypeDefinition constDesigner = null; if (IsApplication) { @@ -152,6 +159,7 @@ bool Run (DirectoryAssemblyResolver res) ); CreateCtor (cache, constDesigner, module); constDesigner.CustomAttributes.Add (editorBrowserAttr); + constDesigner.CustomAttributes.Add (generatedCodeAttr); module.Types.Add (constDesigner); } diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateResourceDesignerIntermediateClass.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateResourceDesignerIntermediateClass.cs index 22f9d4cf338..a34379d8044 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateResourceDesignerIntermediateClass.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateResourceDesignerIntermediateClass.cs @@ -21,6 +21,7 @@ public class GenerateResourceDesignerIntermediateClass : AndroidTask // //------------------------------------------------------------------------------ using System; +using System.CodeDom.Compiler; namespace %NAMESPACE% { #pragma warning disable IDE0002 @@ -28,6 +29,7 @@ namespace %NAMESPACE% { /// Android Resource Designer class. /// Exposes the Android Resource designer assembly into the project Namespace. /// + [GeneratedCode(""%TOOL%"", ""%VERSION%"")] public partial class Resource : %BASECLASS% { } #pragma warning restore IDE0002 @@ -40,6 +42,7 @@ public partial class Resource : %BASECLASS% { //------------------------------------------------------------------------------ namespace %NAMESPACE% +[] type Resource = %BASECLASS% "; @@ -54,11 +57,19 @@ public override bool RunTask () //bool isVB = string.Equals (extension, ".vb", StringComparison.OrdinalIgnoreCase); bool isFSharp = string.Equals (language, "F#", StringComparison.OrdinalIgnoreCase); bool isCSharp = string.Equals (language, "C#", StringComparison.OrdinalIgnoreCase); + var version = typeof(GenerateResourceDesignerIntermediateClass).Assembly.GetName().Version; string template = ""; - if (isCSharp) - template = CSharpTemplate.Replace ("%NAMESPACE%", Namespace).Replace ("%BASECLASS%", ns); - else if (isFSharp) - template = FSharpTemplate.Replace ("%NAMESPACE%", Namespace).Replace ("%BASECLASS%", ns); + if (isCSharp) { + template = CSharpTemplate.Replace ("%NAMESPACE%", Namespace) + .Replace ("%BASECLASS%", ns) + .Replace ("%VERSION%", version.ToString ()) + .Replace ("%TOOL%", nameof (GenerateResourceDesignerIntermediateClass)); + } else if (isFSharp) { + template = FSharpTemplate.Replace ("%NAMESPACE%", Namespace) + .Replace ("%BASECLASS%", ns) + .Replace ("%VERSION%", version.ToString ()) + .Replace ("%TOOL%", nameof (GenerateResourceDesignerIntermediateClass)); + } Files.CopyIfStringChanged (template, OutputFile.ItemSpec); return !Log.HasLoggedErrors;