diff --git a/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/PreserveDynamicTypes.cs b/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/PreserveDynamicTypes.cs index 5c157821ede..18ced568b35 100644 --- a/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/PreserveDynamicTypes.cs +++ b/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/PreserveDynamicTypes.cs @@ -19,6 +19,14 @@ public override SubStepTargets Targets { bool preserve_dynamic; List saved = new List (); + void PreserveLibrary (AssemblyDefinition assembly) + { + var action = Annotations.GetAction (assembly); + ResolveFromAssemblyStep.ProcessLibrary (context, assembly); + if (action == AssemblyAction.Link) + Annotations.SetAction (assembly, action); + } + public override void ProcessAssembly (AssemblyDefinition assembly) { // Preserve dynamic dependencies only when Microsoft.CSharp is referenced. @@ -26,13 +34,13 @@ public override void ProcessAssembly (AssemblyDefinition assembly) case "Microsoft.CSharp": preserve_dynamic = true; foreach (var savedAssembly in saved) - ResolveFromAssemblyStep.ProcessLibrary (context, savedAssembly); - ResolveFromAssemblyStep.ProcessLibrary (context, assembly); + PreserveLibrary (savedAssembly); + PreserveLibrary (assembly); break; case "Mono.CSharp": case "System.Core": if (preserve_dynamic) - ResolveFromAssemblyStep.ProcessLibrary (context, assembly); + PreserveLibrary (assembly); else saved.Add (assembly); break;