Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
        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);
                }
            }
        }