public List<string> FindWronglyReferencedNugetAssemblies()
        {
            var allErrors = new List<string>();
            //collect all assemblies form used nuget folders
            IEnumerable<string> allNugetPackageAssemblies = GetUsedNuGetAllAssemblies();

            List<FileInfo> filesOfNuGetAssemblies = allNugetPackageAssemblies.Select(f => new FileInfo(f)).ToList();

            foreach (VsProject project in _solutionLoader.Projects)
            {
                if (!File.Exists(project.ProjectFile))
                {
                    Trace.WriteLine(string.Format("Skipping, no project file found {0}", project.ProjectFile));
                    continue;
                }

                List<Reference> references;
                using (var xmlReader = new EnumerableXmlReader<Reference>(new NamespaceIgnorantXmlTextReader(File.OpenText(project.ProjectFile))))
                {
                    references = xmlReader.Stream().Where(r => !string.IsNullOrWhiteSpace(r.HintPath)).ToList();
                }

                IEnumerable<string> errors = CheckReferences(project, references, filesOfNuGetAssemblies);

                if (errors.Any()) allErrors.AddRange(errors);
            }

            return allErrors;
        }
        public void CollectAll(string solutionFolder = null)
        {
            var fileFinder = new FileFinder(Environment.CurrentDirectory);

            string solutionPath = solutionFolder ?? fileFinder.FindSolutionFolder();

            SolutionRoot = solutionPath;

            LogWrite(string.Format("FindSolutionFolder: {0}", solutionPath));

            //get solution repository file and get all package files
            NuGetRepositoryFile = fileFinder.FindNuGetRepositoryInSolution(solutionPath);
            using (var xmlReader = new EnumerableXmlReader<repository>(NuGetRepositoryFile))
            {
                RepositoryPackageFiles = xmlReader.Stream().Select(r => r.path).Where(f=>!IsInIgnorePath(f)).ToList();
            }

            LogWrite(string.Format("Packages.config found: {0}",
                                   string.Join(Environment.NewLine, RepositoryPackageFiles)));

            //get all packages in nuget package folder
            NugetPackageFolders =
                new FileInfo(NuGetRepositoryFile).Directory.GetDirectories().Select(d => d.Name).ToList();

            LogWrite(string.Format("NuGet Packages found: {0}", string.Join(", ", NugetPackageFolders)));

            //do a search for all package files
            FoundPackageFiles = fileFinder.FindPackageFilesInSolution(solutionPath).Where(f => !IsInIgnorePath(f)).ToList();

            LogWrite(string.Format("FindPackageFilesInSolution: {0}",
                                   string.Join(Environment.NewLine, FoundPackageFiles)));

            //add projects with nuget project package files
            foreach (string packagefile in FoundPackageFiles)
            {
                List<package> nugetPackages;
                using (var xmlReader = new EnumerableXmlReader<package>(packagefile))
                {
                    nugetPackages = xmlReader.Stream().ToList();
                }
                string projectPath = new FileInfo(packagefile).Directory.FullName;
                var project = new VsProject
                                  {
                                      PackageFile = packagefile,
                                      ListPackages = nugetPackages,
                                      ProjectPath = projectPath,
                                      ProjectFile = fileFinder.FindProjectFilesInSolution(projectPath).FirstOrDefault() ?? projectPath
                                  };
                Projects.Add(project);

                LogWrite(string.Format("Project with nuget packages: {0}; Packages:\n{1}",
                                       project.ProjectFile,
                                       string.Join(Environment.NewLine,
                                                   project.ListPackages.Select(
                                                       p => string.Format("\t{0}.{1}", p.id, p.version)))));
            }

            //add projects not having nuget package files
            var projectFiles = fileFinder.FindProjectFilesInSolution(solutionPath) ?? new string[]{};
            foreach (string projectFile in projectFiles.Where(pf => !Projects.Any(p => p.ProjectFile.Equals(pf, StringComparison.OrdinalIgnoreCase))))
            {
                Projects.Add(
                    new VsProject
                        {
                            PackageFile = null,
                            ListPackages = new List<package>(0),
                            ProjectPath = new FileInfo(projectFile).Directory.FullName,
                            ProjectFile = projectFile
                        }
                    );
            }

            //filter projects by ignorepaths
            Projects = Projects.Where(p => !IsInIgnorePath(p.ProjectFile)).ToList();

            LogWrite(string.Format("Total Projects found {0}:\n{1}", Projects.Count,
                                   string.Join(Environment.NewLine, Projects.Select(p => p.ProjectFile))));
        }