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)))); }