/// <summary> /// Attempts to return the file location for the specified type of analysis result. /// Returns null if there is not a result for the specified type, or if the /// file does not exist. /// </summary> public static string TryGetAnalysisFileLocation(this ProjectInfo projectInfo, AnalysisType analysisType) { string location = null; AnalysisResult result = null; if (projectInfo.TryGetAnalyzerResult(analysisType, out result)) { if (File.Exists(result.Location)) { location = result.Location; } } return(location); }
/// <summary> /// Attempts to find and return the analyzer result with the specified id /// </summary> /// <returns>True if the analyzer result was found, otherwise false</returns> public static bool TryGetAnalyzerResult(this ProjectInfo projectInfo, string id, out AnalysisResult result) { if (projectInfo == null) { throw new ArgumentNullException("projectInfo"); } result = null; if (projectInfo.AnalysisResults != null) { result = projectInfo.AnalysisResults.FirstOrDefault(ar => AnalysisResult.ResultKeyComparer.Equals(id, ar.Id)); } return(result != null); }
/// <summary> /// Attempts to find and return the analyzer result with the specified id /// </summary> /// <returns>True if the analyzer result was found, otherwise false</returns> public static bool TryGetAnalyzerResult(this ProjectInfo projectInfo, AnalysisType analyzerType, out AnalysisResult result) { return(TryGetAnalyzerResult(projectInfo, analyzerType.ToString(), out result)); }
/// <summary> /// Creates a folder containing a ProjectInfo.xml and compiled file list as /// specified in the supplied descriptor /// </summary> private static void CreateFilesFromDescriptor(ProjectDescriptor descriptor, string compileFiles, string contentFiles, string fxcopReportFileName, string visualStudioCodeCoverageReportFileName) { if (!Directory.Exists(descriptor.FullDirectoryPath)) { Directory.CreateDirectory(descriptor.FullDirectoryPath); } ProjectInfo projectInfo = descriptor.CreateProjectInfo(); // Create the analysis file list if any input files have been specified if (descriptor.FilesToAnalyse.Any()) { string fullAnalysisFileListPath = Path.Combine(descriptor.FullDirectoryPath, compileFiles); File.WriteAllLines(fullAnalysisFileListPath, descriptor.FilesToAnalyse); // Add the compile list as an analysis result projectInfo.AnalysisResults.Add(new AnalysisResult() { Id = AnalysisType.FilesToAnalyze.ToString(), Location = fullAnalysisFileListPath }); } // Create the FxCop report file if (fxcopReportFileName != null) { string fullFxCopName = Path.Combine(descriptor.FullDirectoryPath, fxcopReportFileName); File.Create(fullFxCopName); // Add the FxCop report as an analysis result var analysisResult = new AnalysisResult() { Id = AnalysisType.FxCop.ToString(), Location = fullFxCopName }; descriptor.AnalysisResults.Add(analysisResult); projectInfo.AnalysisResults.Add(analysisResult); } // Create the Visual Studio Code Coverage report file if (visualStudioCodeCoverageReportFileName != null) { string fullVisualStudioCodeCoverageName = Path.Combine(descriptor.FullDirectoryPath, visualStudioCodeCoverageReportFileName); File.Create(fullVisualStudioCodeCoverageName); // Add the Visual Studio Code Coverage report as an analysis result var analysisResult = new AnalysisResult() { Id = AnalysisType.VisualStudioCodeCoverage.ToString(), Location = fullVisualStudioCodeCoverageName }; descriptor.AnalysisResults.Add(analysisResult); projectInfo.AnalysisResults.Add(analysisResult); } // Save a project info file in the target directory projectInfo.Save(Path.Combine(descriptor.FullDirectoryPath, FileConstants.ProjectInfoFileName)); }
/// <summary> /// Attempts to create an <see cref="AnalysisResult"/> from the supplied task item. /// Returns null if the task item does not have the required metadata. /// </summary> private AnalysisResult TryCreateResultFromItem(ITaskItem taskItem) { Debug.Assert(taskItem != null, "Supplied task item should not be null"); AnalysisResult result = null; string id = taskItem.GetMetadata(BuildTaskConstants.ResultMetadataIdProperty); if (!string.IsNullOrWhiteSpace(id) && !string.IsNullOrWhiteSpace(taskItem.ItemSpec)) { string path = taskItem.ItemSpec; if (!Path.IsPathRooted(path)) { this.Log.LogMessage(MessageImportance.Low, Resources.WPIF_ResolvingRelativePath, id, path); string projectDir = Path.GetDirectoryName(this.FullProjectPath); string absPath = Path.Combine(projectDir, path); if (File.Exists(absPath)) { this.Log.LogMessage(MessageImportance.Low, Resources.WPIF_ResolvedPath, absPath); path = absPath; } else { this.Log.LogMessage(MessageImportance.Low, Resources.WPIF_FailedToResolvePath, taskItem.ItemSpec); } } result = new AnalysisResult() { Id = id, Location = path }; } return result; }