private void CheckDashboardStrings(Boolean unusedOnly) { // Init Folders var currentDir = System.IO.Directory.GetCurrentDirectory(); Trace("CurrentDir: {0}", currentDir); var rootFolderInfo = ResolveFolder(currentDir, WebFolder); Trace("Web Root: {0}", rootFolderInfo.FullName); var outputFolderInfo = ResolveFolder(currentDir, OutputPath); Trace("Output Path: {0}", outputFolderInfo.FullName); // Load Strings var stringsFileName = Path.Combine(rootFolderInfo.FullName, StringsFile); if (!File.Exists(stringsFileName)) { throw new Exception(string.Format("Strings file not found: {0}", stringsFileName)); } int lineNumbers; var stringsDic = this.CreateStringsDictionary(new FileInfo(stringsFileName), out lineNumbers); Trace("Loaded {0} strings from strings file containing {1} lines", stringsDic.Count, lineNumbers); var allFiles = rootFolderInfo.GetFiles("*", SearchOption.AllDirectories); var filteredFiles1 = allFiles.Where(f => TargetExtensions.Any(e => string.Equals(e, f.Extension, StringComparison.OrdinalIgnoreCase))); var filteredFiles2 = filteredFiles1.Where(f => !ExcludePaths.Any(p => f.FullName.Contains(p))); var selectedFiles = filteredFiles2.OrderBy(f => f.FullName).ToList(); var wordIndex = IndexBuilder.BuildIndexFromFiles(selectedFiles, rootFolderInfo.FullName); Trace("Created word index from {0} files containing {1} individual words", selectedFiles.Count, wordIndex.Keys.Count); var outputFileName = Path.Combine(outputFolderInfo.FullName, string.Format("StringCheck_{0:yyyyMMddHHmmss}.xml", DateTime.Now)); var settings = new XmlWriterSettings { Indent = true, Encoding = Encoding.UTF8, WriteEndDocumentOnClose = true }; Trace("Output file: {0}", outputFileName); using (XmlWriter writer = XmlWriter.Create(outputFileName, settings)) { writer.WriteStartDocument(true); // Write the Processing Instruction node. string xslText = "type=\"text/xsl\" href=\"StringCheck.xslt\""; writer.WriteProcessingInstruction("xml-stylesheet", xslText); writer.WriteStartElement("StringUsages"); writer.WriteAttributeString("ReportTitle", unusedOnly ? "Unused Strings Report" : "String Usage Report"); writer.WriteAttributeString("Mode", unusedOnly ? "UnusedOnly" : "All"); foreach (var kvp in stringsDic) { var occurences = wordIndex.Find(kvp.Key); if (occurences == null || !unusedOnly) { ////Trace("{0}: {1}", kvp.Key, kvp.Value); writer.WriteStartElement("Dictionary"); writer.WriteAttributeString("Token", kvp.Key); writer.WriteAttributeString("Text", kvp.Value); if (occurences != null && !unusedOnly) { foreach (var occurence in occurences) { writer.WriteStartElement("Occurence"); writer.WriteAttributeString("FileName", occurence.FileName); writer.WriteAttributeString("FullPath", occurence.FullPath); writer.WriteAttributeString("LineNumber", occurence.LineNumber.ToString()); writer.WriteEndElement(); ////Trace(" {0}:{1}", occurence.FileName, occurence.LineNumber); } } writer.WriteEndElement(); } } } TestContext.AddResultFile(outputFileName); TestContext.AddResultFile(outputFolderInfo.FullName); }