protected override void Process() { // To keep facades, scan all references so that even unused facades are kept var assemblies = Context.KeepTypeForwarderOnlyAssemblies ? Context.GetReferencedAssemblies().ToArray() : Annotations.GetAssemblies().ToArray(); // Ensure that any assemblies which need to be removed are marked for deletion, // including assemblies which are not referenced by any others. foreach (var assembly in assemblies) { RemoveUnmarkedAssembly(assembly); } // Look for references (included to previously unresolved assemblies) marked for deletion foreach (var assembly in assemblies) { UpdateAssemblyReferencesToRemovedAssemblies(assembly); } // Update scopes before removing any type forwarder. foreach (var assembly in assemblies) { var action = Annotations.GetAction(assembly); switch (action) { case AssemblyAction.CopyUsed: case AssemblyAction.Link: case AssemblyAction.Save: bool changed = AssemblyReferencesCorrector.SweepAssemblyReferences(assembly); if (changed && action == AssemblyAction.CopyUsed) { Annotations.SetAction(assembly, AssemblyAction.Save); } break; } } foreach (var assembly in assemblies) { ProcessAssemblyAction(assembly); } if (Context.KeepTypeForwarderOnlyAssemblies) { return; } // Ensure that we remove any assemblies which were resolved while sweeping references foreach (var assembly in Annotations.GetAssemblies().ToArray()) { if (!assemblies.Any(processedAssembly => processedAssembly == assembly)) { Debug.Assert(!IsUsedAssembly(assembly)); Annotations.SetAction(assembly, AssemblyAction.Delete); } } }
protected override void Process() { // To keep facades, scan all references so that even unused facades are kept assemblies = Context.KeepTypeForwarderOnlyAssemblies ? Context.GetReferencedAssemblies().ToArray() : Annotations.GetAssemblies().ToArray(); // Ensure that any assemblies which need to be removed are marked for deletion, // including assemblies which are not referenced by any others. foreach (var assembly in assemblies) { RemoveUnmarkedAssembly(assembly); } // Look for references (included to previously unresolved assemblies) marked for deletion foreach (var assembly in assemblies) { UpdateAssemblyReferencesToRemovedAssemblies(assembly); } foreach (var assembly in assemblies) { ProcessAssemblyAction(assembly); } if (Context.KeepTypeForwarderOnlyAssemblies) { return; } // Ensure that we remove any assemblies which were resolved while sweeping references foreach (var assembly in Annotations.GetAssemblies().ToArray()) { if (!assemblies.Any(processedAssembly => processedAssembly == assembly)) { Debug.Assert(!IsUsedAssembly(assembly)); Annotations.SetAction(assembly, AssemblyAction.Delete); } } }