void BuildNewFilters() { Filters.Project filters = new Filters.Project(); filters.itemGroup.AppendFilter("include"); filters.itemGroup.AppendFilter("source"); List <string> SourceFie = new List <string>(); List <string> IncludeFile = new List <string>(); GenerateProjectFile.GetSource(Name, ref SourceFie); GenerateProjectFile.GetIncludeFile(Name, ref IncludeFile); foreach (var ji in SourceFie) { filters.itemGroup.AppendClCompile(ji, "source"); } foreach (var ji in IncludeFile) { filters.itemGroup.AppendClInclude(ji, "include"); } try { File.Delete(FileFilters); } catch { }; filters.Save(FileFilters); }
public static void CreateFilters(string File, string Project, string Out = null) { GenerateProjectFile GenerateProjectFile = new GenerateProjectFile(); GenerateProjectFile.RegisterProject(Project); List <string> SourceFie = new List <string>(); List <string> IncludeFile = new List <string>(); List <string> ResourceFiles = new List <string>(); GenerateProjectFile.GetResourceFile(Project, ref ResourceFiles); GenerateProjectFile.GetSource(Project, ref SourceFie); GenerateProjectFile.GetIncludeFile(Project, ref IncludeFile); Filters.Project filetrs = new Filters.Project(); if (!filetrs.Load(File)) { Console.WriteLine("Ошибка не удалось загрузить " + File); } foreach (Filters.ClCompile i in filetrs.itemGroup.ClCompilers) { List <string> list = new List <string>(); foreach (string a in SourceFie) { if (Path.GetFileName(i.Include).ToLower() == Path.GetFileName(a).ToLower()) { list.Add(a); } } GetFile(ref list, ref i.Include); } for (int i = filetrs.itemGroup.ClCompilers.Count - 1; i >= 0; i--) { if (filetrs.itemGroup.ClCompilers[i].Include == " УДАЛИТЬ.УДАЛИТЬ") { filetrs.itemGroup.ClCompilers.RemoveAt(i); } } foreach (Filters.ClInclude i in filetrs.itemGroup.ClIncludes) { List <string> list = new List <string>(); foreach (string a in IncludeFile) { if (Path.GetFileName(i.Include).ToLower() == Path.GetFileName(a).ToLower()) { list.Add(a); } } GetFile(ref list, ref i.Include); } for (int i = filetrs.itemGroup.ClIncludes.Count - 1; i >= 0; i--) { if (filetrs.itemGroup.ClIncludes[i].Include == " УДАЛИТЬ.УДАЛИТЬ") { filetrs.itemGroup.ClIncludes.RemoveAt(i); } } bool b1 = false, b2 = false; foreach (Filters.None i in filetrs.itemGroup.Nones) { if (Path.GetFileName(i.Include).ToLower() == Path.GetFileName(GenerateProjectFile.PathFileInfo[Project]).ToLower()) { List <string> list = new List <string>(); list.Add(GenerateProjectFile.PathFileInfo[Project]); if (b1) { continue; } GetFile(ref list, ref i.Include); b1 = true; } else if (ResourceFiles.Count != 0) { foreach (string a in ResourceFiles) { if (Path.GetFileName(i.Include).ToLower() == Path.GetFileName(a).ToLower()) { List <string> list = new List <string>(); list.Add(a); if (b2) { continue; } GetFile(ref list, ref i.Include); b2 = true; } else { i.Include = " УДАЛИТЬ.УДАЛИТЬ"; } } } else { i.Include = " УДАЛИТЬ.УДАЛИТЬ"; } } for (int i = filetrs.itemGroup.Nones.Count - 1; i >= 0; i--) { if (filetrs.itemGroup.Nones[i].Include == " УДАЛИТЬ.УДАЛИТЬ") { filetrs.itemGroup.Nones.RemoveAt(i); } } string FiltersInProject = String.Empty; { string path = Path.GetDirectoryName(GenerateProjectFile.PathFileInfo[Project]); FiltersInProject = Path.Combine(path, Project + ".vcxproj.filters"); } { Dictionary <string, bool> paths = new Dictionary <string, bool>(); foreach (Filters.ClCompile i in filetrs.itemGroup.ClCompilers) { if (paths.ContainsKey(i.Filter) == false) { paths.Add(i.Filter, true); } } foreach (Filters.ClInclude i in filetrs.itemGroup.ClIncludes) { if (paths.ContainsKey(i.Filter) == false) { paths.Add(i.Filter, true); } } foreach (Filters.None i in filetrs.itemGroup.Nones) { if (paths.ContainsKey(i.Filter) == false) { paths.Add(i.Filter, true); } } foreach (Filters.Filter i in filetrs.itemGroup.Filters) { if (paths.ContainsKey(i.Include) == true) { int offset = i.Include.LastIndexOf('\\'); if (offset == -1) { continue; } string in_path = i.Include.Remove(offset); if (paths.ContainsKey(in_path) == false) { paths.Add(in_path, true); } } } for (int i = filetrs.itemGroup.Filters.Count - 1; i >= 0; i--) { if (paths.ContainsKey(filetrs.itemGroup.Filters[i].Include) == false) { filetrs.itemGroup.Filters.RemoveAt(i); } } } filetrs.Save(Out != null? Out: FiltersInProject); }