private void LoadAllReferencedAssemblies(AssemblyPointer from)
        {
            // Already loaded ?
            if (listForBuild.Contains(from))
            {
                return;
            }
            listForBuild.Add(from);

            // Load and Build AssemblyPointers and Dependencies
            foreach (AssemblyName name in GetFilteredReferencedAssemblies(from))
            {
                AssemblyPointer to = FindAssemblyByName(name);
                if (to == null)
                {
                    to = new AssemblyPointer(name);
                }

                if (FindDependency(from, to) == null)
                {
                    Dependency dependency = new Dependency(from, to);
                    Dependencies.Add(dependency);
                }
            }

            foreach (AssemblyName name in GetFilteredReferencedAssemblies(from))
            {
                AssemblyPointer to = GetAssemblyByName(name);
                if (to.PhysicalyExists)
                {
                    LoadAllReferencedAssemblies(to);
                }
            }
        }
 private IEnumerable <AssemblyName> GetFilteredReferencedAssemblies(AssemblyPointer from)
 {
     return(from
            .GetReferencedAssemblies()
            .Where(x => !filterRegexList
                   .Any(y => y.Match(x.Name).Success)));
 }
        private AssemblyPointer GetAssemblyByName(AssemblyName name)
        {
            AssemblyPointer pointer = FindAssemblyByName(name);

            if (pointer == null)
            {
                throw new InvalidOperationException();
            }
            return(pointer);
        }
        private static List <AssemblyPointer> FindVersionConflicts(AssemblyPointer pointer, Model model)
        {
            List <AssemblyPointer> versionConfilcts = new List <AssemblyPointer>();

            foreach (AssemblyPointer similar in model.FindGroupByName("All Assemblies").Pointers)
            {
                if (pointer.GetName().Name.Equals(similar.GetName().Name) &&
                    !pointer.GetName().Version.Equals(similar.GetName().Version))
                {
                    versionConfilcts.Add(similar);
                    versionConfilcts.Add(pointer);

                    pointer.Errors.Add("The model contains other version of this assembly");
                    similar.Errors.Add("The model contains other version of this assembly");
                }
            }

            return(versionConfilcts);
        }
        /////////////////////////////
        ///////PRIVATE GETTERS///////
        /////////////////////////////

        private Dependency FindDependency(AssemblyPointer from, AssemblyPointer to)
        {
            return(Dependencies.FirstOrDefault(x => x.From.GetName().Equals(from.GetName()) &&
                                               x.To.GetName().Equals(to.GetName())));
        }