예제 #1
0
 public Reference(VerifiedFolder baseDirectory, ReferenceInclude include, string relativePath)
 {
     BaseDirectory   = baseDirectory;
     RelativePath    = relativePath;
     Include         = include;
     VersionFromPath = VersionWithSuffix.TryParseFromPath(relativePath);
 }
예제 #2
0
        public Solution(VerifiedFile slnFile, Project[] projects, ProjectLine[] projectLines)
        {
            _slnFile     = slnFile;
            Projects     = projects;
            ProjectLines = projectLines;

            PackagesDirectory = slnFile.Directory.GetRelativeFolder("packages");
        }
        public static bool PathBeginsWith(this IFile file, VerifiedFolder folder)
        {
            if (folder == null)
            {
                return(false);
            }

            var thisPath   = file.FullName.ToLower();
            var folderPath = folder.FullName.ToLower();

            return(thisPath.StartsWith(folderPath));
        }
예제 #4
0
        public PackagesConfig TryReadPackagesConfig(VerifiedFolder folder)
        {
            var file = folder.GetRelativeFile("packages.config");

            if (file is VerifiedFile verifiedFile)
            {
                return(new PackagesConfig(verifiedFile, this));
            }
            else
            {
                return(null);
            }
        }
        public PackagesConfig CreateNewPackagesConfig(VerifiedFolder projectDirectory)
        {
            string[] lines = new string[]
            {
                @"<?xml version=""1.0"" encoding=""utf-8""?>",
                "<packages>",
                "</packages>"
            };

            var filePath = projectDirectory.FullName + @"\packages.config";

            File.WriteAllLines(filePath, lines);
            return(_nugetReader.TryReadPackagesConfig(projectDirectory));
        }
예제 #6
0
        static TestPaths()
        {
            var binFolder = new VerifiedFolder(TestContext.CurrentContext.TestDirectory);

            if (binFolder.FullName.Contains("Console.Tests"))
            {
                TestProjectDirectory = binFolder
                                       .GetFirstAncestor("ProjectSanitizer.Console.Tests")
                                       .Parent
                                       .GetRelativeFolder("ProjectSanitizer.Tests");
            }
            else
            {
                TestProjectDirectory = binFolder.GetFirstAncestor("ProjectSanitizer.Tests");
            }
        }
예제 #7
0
        public static void RevertAllCsProjAndPackagesConfigFiles(VerifiedFolder directory)
        {
            var csprojFile = directory.GetFiles()
                             .FirstOrDefault(f => f.FullName.EndsWith("csproj"));

            if (csprojFile != null)
            {
                RevertFileState(csprojFile);

                var packagesConfigFile = directory.GetRelativeFile("packages.config");
                RevertFileState(packagesConfigFile);
            }

            foreach (var folder in directory.GetDirectories())
            {
                RevertAllCsProjAndPackagesConfigFiles(folder);
            }
        }
        public string CorrectPackagesPath(VerifiedFolder projectDirectory, VerifiedFolder packagesDirectory, string path)
        {
            if (!path.ToLower().Contains("packages"))
            {
                return(path);
            }

            path = path.Substring(path.IndexOf("packages"));

            var folder = projectDirectory;

            while (folder != null && folder.GetRelativeFolderOrDefault("packages") == null)
            {
                folder = folder.Parent;
                path   = @"..\" + path;
            }

            return(path);
        }
예제 #9
0
 public RelativeFile(VerifiedFolder projectDirectory, string relativePath)
 {
     _file = new FileInfo(Path.Combine(projectDirectory.FullName, relativePath));
 }
 public void AddOrModifyNugetReference(NugetReference referenceToCopy, Project project, VerifiedFolder packagesDirectory)
 {
     AddOrModifyReferencePackagesConfig(referenceToCopy, project);
     AddOrModifyReferenceInProjectFile(referenceToCopy, project, packagesDirectory);
 }
        public void AddOrModifyReferenceInProjectFile(NugetReference referenceToCopy, Project project, VerifiedFolder packagesDirectory)
        {
            var srcNode = referenceToCopy.Project.GetReferenceNode(referenceToCopy.Package.ID)
                          ?? throw new System.Exception("Unable to read source reference node for package " + referenceToCopy.Package.ID);

            var xmlNode = project.GetReferenceNode(referenceToCopy.Package.ID);

            if (xmlNode != null)
            {
                var copy = xmlNode.OwnerDocument.ImportNode(srcNode, true);
                xmlNode.ParentNode.ReplaceChild(newChild: copy, oldChild: xmlNode);
                project.SaveChanges();
            }
            else
            {
                var itemGroupNode = project.GetReferenceItemGroupNode();
                var copy          = itemGroupNode.OwnerDocument.ImportNode(srcNode, true);
                itemGroupNode.AppendChild(copy);
            }

            var hintPathNode = project.GetReferenceHintPathNode(referenceToCopy.Package.ID);

            if (hintPathNode != null)
            {
                hintPathNode.InnerText = CorrectPackagesPath(project.ProjectDirectory, packagesDirectory, hintPathNode.InnerText);
            }

            project.SaveChanges();
        }
 public ProjectReference(VerifiedFolder baseDirectory, ReferenceInclude include, string relativePath)
     : base(baseDirectory, include, relativePath)
 {
 }
예제 #13
0
 public MissingFile(VerifiedFolder projectDirectory, string relativePath) :
     base(projectDirectory, relativePath)
 {
 }