private void LookForProjectFile(DirectoryInfo dir, Config currentConfig) { var projectFiles = dir.GetFiles().Where(f => f.Extension.In(".csproj", ".vbproj", ".fsproj", ".sqlproj")); LookForConfigFileAndMaybeChangeConfiguration(dir, currentConfig); foreach (var projectFile in projectFiles) { string projectPath = projectFile.DirectoryName; XDocument doc = XDocument.Load(projectFile.FullName); XNamespace vsNamespace = Constants.VisualStudioProjectFileXmlNamespace; var filesIncludedInCurrentProject = doc.Element(vsNamespace + "Project") .Descendants(vsNamespace + "ItemGroup") .SelectMany(x => x.Elements().Where(y => y.Name.LocalName.In(Constants.VisualStudioBuildActions)).Select(y => y.Attribute("Include").Value)).ToArray(); GenerateMessage("----Project found : " + projectFile.Name); LookForProjectMissingFiles(filesIncludedInCurrentProject, projectPath, dir, currentConfig); } if (projectFiles == null || projectFiles.Count() == 0) { foreach (DirectoryInfo subDir in dir.GetDirectories()) { LookForProjectFile(subDir, currentConfig); } } }
private void LookForConfigFileAndMaybeChangeConfiguration(DirectoryInfo currentDir, Config currentConfig) { //look for any file with this extension FileInfo configFile = currentDir.GetFiles().Where(f => f.Name.ToLower().EndsWith(".vspniff")).FirstOrDefault(); if (configFile != null) { Config newConfig = Config.Load(configFile.FullName); currentConfig.Merge(newConfig); } }
public void Merge(Config config) { if (config.Mode == ConfigFileMode.Override) { ExcludedExtensions = config.ExcludedExtensions; ExcludedDirs = config.ExcludedDirs; } else if (config.Mode == ConfigFileMode.Append) { ExcludedDirs = ExcludedDirs.Union(config.ExcludedDirs).ToArray(); ExcludedExtensions = ExcludedExtensions.Union(config.ExcludedExtensions).ToArray(); } }
public void SetUp() { _config = new Config { Mode = ConfigFileMode.Append, ExcludedDirs = "bin,obj".Split(','), ExcludedExtensions = "bat,exe,com".Split(',') }; _config2 = new Config { Mode = ConfigFileMode.Append, ExcludedDirs = new string[] { "bin", "trash", "home" }, ExcludedExtensions = new string[] { "exe", "bin", "zip" } }; }
private void LookForProjectMissingFiles(string[] projectFiles, string projectPath, DirectoryInfo dir, Config currentConfig) { string relativeDirPath = dir.FullName.Replace(projectPath + "\\", ""); LookForConfigFileAndMaybeChangeConfiguration(dir, currentConfig); if (!currentConfig.ExcludedDirs.Any(x => relativeDirPath.StartsWith(x))) { foreach (FileInfo file in dir.GetFiles()) { string relativeFilePath = file.FullName.Replace(projectPath + "\\", ""); if (!currentConfig.ExcludedExtensions.Any(x => x == file.Extension.TrimStart(new char[] { '.' }))) { if (!projectFiles.Contains(relativeFilePath)) { GenerateMessage("Potentially missing file " + relativeFilePath); } } } foreach (DirectoryInfo subDir in dir.GetDirectories()) { LookForProjectMissingFiles(projectFiles, projectPath, subDir, currentConfig); } } }