public static string MakeFilterItems( IEnumerable <string> files, string UserProjectDirectory, string pathPrefix = "", Dictionary <string, string> predeterminedTags = null) { StringBuilder stringBuilder1 = new StringBuilder(); Dictionary <string, string> dictionary = new Dictionary <string, string>((IEqualityComparer <string>)StringComparer.InvariantCultureIgnoreCase); foreach (string file in files) { string path = Paths.MakeRelativePath(UserProjectDirectory, file); string fileTag = VisualStudioProjectHelpers.DetermineFileTag(file, predeterminedTags); string directoryName = Path.GetDirectoryName(path); string str = VisualStudioProjectHelpers.EscapeXML(pathPrefix + path); if (string.IsNullOrEmpty(directoryName)) { stringBuilder1.AppendFormat(" <{0} Include=\"{1}\" />{2}", (object)fileTag, (object)str, (object)Environment.NewLine); } else { if (!dictionary.ContainsKey(directoryName)) { dictionary.Add(directoryName, Guid.NewGuid().ToString()); } stringBuilder1.AppendFormat(" <{0} Include=\"{1}\">{2}", (object)fileTag, (object)str, (object)Environment.NewLine); stringBuilder1.AppendFormat(" <Filter>{0}</Filter>{1}", (object)directoryName, (object)Environment.NewLine); stringBuilder1.AppendFormat(" </{0}>{1}", (object)fileTag, (object)Environment.NewLine); } } HashSet <string> stringSet = new HashSet <string>(); foreach (KeyValuePair <string, string> keyValuePair in dictionary) { for (string directoryName = Path.GetDirectoryName(keyValuePair.Key); !string.IsNullOrEmpty(directoryName); directoryName = Path.GetDirectoryName(directoryName)) { if (!dictionary.ContainsKey(directoryName)) { stringSet.Add(directoryName); } } } foreach (string key in stringSet) { dictionary.Add(key, Guid.NewGuid().ToString()); } StringBuilder stringBuilder2 = new StringBuilder(); foreach (KeyValuePair <string, string> keyValuePair in dictionary) { stringBuilder2.AppendFormat(" <Filter Include=\"{0}\">{1}", (object)keyValuePair.Key, (object)Environment.NewLine); stringBuilder2.AppendFormat(" <UniqueIdentifier>{{{0}}}</UniqueIdentifier>{1}", (object)keyValuePair.Value, (object)Environment.NewLine); stringBuilder2.AppendFormat(" </Filter>{0}", (object)Environment.NewLine); } return(stringBuilder2?.ToString() + stringBuilder1.ToString()); }
public static string MakeProjectItems( IEnumerable <string> files, string projectDirectory, bool excludeFromResourceIndex, string pathPrefix = "", Dictionary <string, string> predeterminedTags = null, Dictionary <string, string> additionalItemAttributes = null) { StringBuilder stringBuilder = new StringBuilder(); foreach (string file1 in files) { string withoutExtension = Path.GetFileNameWithoutExtension(file1); string file2 = VisualStudioProjectHelpers.EscapeXML(pathPrefix + Paths.MakeRelativePath(projectDirectory, file1)); string fileTag = VisualStudioProjectHelpers.DetermineFileTag(file1, predeterminedTags); string additionalAttributes = VisualStudioProjectHelpers.DetermineAdditionalAttributes(file2, additionalItemAttributes); stringBuilder.AppendLine(" <" + fileTag + " Include=\"" + file2 + "\"" + additionalAttributes + ">"); switch (fileTag) { case "ClCompile": if (Path.GetFileName(file1).Equals("pch.cpp", StringComparison.InvariantCultureIgnoreCase)) { stringBuilder.AppendLine(" <PrecompiledHeader>Create</PrecompiledHeader>"); goto case "ClInclude"; } else { goto case "ClInclude"; } case "ClInclude": if (Path.GetFileNameWithoutExtension(file1).EndsWith(".xaml", StringComparison.InvariantCultureIgnoreCase)) { stringBuilder.AppendFormat(" <DependentUpon>{0}</DependentUpon>{1}", (object)withoutExtension, (object)Environment.NewLine); break; } break; case "None": if (!string.Equals(Path.GetExtension(file1), ".pfx", StringComparison.OrdinalIgnoreCase) && !string.Equals(Path.GetExtension(file1), ".debug", StringComparison.OrdinalIgnoreCase)) { stringBuilder.AppendLine(" <DeploymentContent>true</DeploymentContent>"); if (excludeFromResourceIndex) { stringBuilder.AppendLine(" <ExcludeFromResourceIndex>true</ExcludeFromResourceIndex>"); } break; } break; case "Reference": if (Path.GetExtension(file1) == ".winmd") { stringBuilder.AppendLine(" <IsWinMDFile>true</IsWinMDFile>"); break; } break; case "AppxManifest": case "Page": stringBuilder.AppendLine(" <SubType>Designer</SubType>"); break; } stringBuilder.AppendFormat(" </{0}>{1}", (object)fileTag, (object)Environment.NewLine); } return(stringBuilder.ToString()); }