private static List <ReferencedProject> GetReferencedProjects(CoverageProject project) { /* * <ItemGroup> * <ProjectReference Include="..\BranchCoverage\Branch_Coverage.csproj" /> * <ProjectReference Include="..\FxClassLibrary1\FxClassLibrary1.csproj"></ProjectReference> * </ItemGroup> */ var referencedProjects = new List <ReferencedProject>(); var xprojectReferences = project.ProjectFileXElement.XPathSelectElements($"/ItemGroup/ProjectReference[@Include]"); foreach (var xprojectReference in xprojectReferences) { var referencedProject = new ReferencedProject(); // ProjectFile referencedProject.ProjectFile = xprojectReference.Attribute("Include").Value; if (!Path.IsPathRooted(referencedProject.ProjectFile)) { referencedProject.ProjectFile = Path.GetFullPath(Path.Combine(project.ProjectFolder, referencedProject.ProjectFile)); } // ProjectFileXElement referencedProject.ProjectFileXElement = XElementUtil.Load(referencedProject.ProjectFile, true); // HasExcludeFromCodeCoverageAssemblyAttribute referencedProject.HasExcludeFromCodeCoverageAssemblyAttribute = HasExcludeFromCodeCoverageAssemblyAttribute(referencedProject.ProjectFileXElement); // AssemblyName referencedProject.AssemblyName = GetAssemblyName(referencedProject.ProjectFileXElement, Path.GetFileNameWithoutExtension(referencedProject.ProjectFile)); // add referencedProjects.Add(referencedProject); } return(referencedProjects); }
public static void ReloadCoverage(IEnumerable <CoverageProject> projects, bool darkMode) { // reset ClearProcesses(); HtmlFilePath = null; CoverageLines.Clear(); // process pipeline projects = projects .Select(project => { project.ProjectFileXElement = XElementUtil.Load(project.ProjectFile, true); project.Settings = GetSettings(project); if (!project.Settings.Enabled) { project.FailureDescription = $"Disabled"; return(project); } if (string.IsNullOrWhiteSpace(project.ProjectFile)) { project.FailureDescription = $"Unsupported project type for DLL '{project.TestDllFile}'"; return(project); } project.CoverageOutputFolder = Path.Combine(project.ProjectOutputFolder, "fine-code-coverage"); project.CoverageOutputFile = Path.Combine(project.CoverageOutputFolder, "project.coverage.xml"); project.IsDotNetSdkStyle = IsDotNetSdkStyle(project); project.ReferencedProjects = GetReferencedProjects(project); project.HasExcludeFromCodeCoverageAssemblyAttribute = HasExcludeFromCodeCoverageAssemblyAttribute(project.ProjectFileXElement); project.AssemblyName = GetAssemblyName(project.ProjectFileXElement, Path.GetFileNameWithoutExtension(project.ProjectFile)); project.EnsureEmptyOutputFolder(); try { var legacyOutputFolder = Path.Combine(project.ProjectOutputFolder, "_outputFolder"); Directory.Delete(legacyOutputFolder, true); } catch { // ignore } return(project); }) .Select(p => p.Step("Run Coverage Tool", project => { // run the appropriate cover tool if (project.IsDotNetSdkStyle) { CoverletUtil.RunCoverlet(project, true); } else { OpenCoverUtil.RunOpenCover(project, true); } })) .Where(x => !x.HasFailed) .ToArray(); // project files var coverOutputFiles = projects .Select(x => x.CoverageOutputFile) .ToArray(); if (!coverOutputFiles.Any()) { return; } // run reportGenerator process ReportGeneratorUtil.RunReportGenerator(coverOutputFiles, darkMode, out var unifiedHtmlFile, out var unifiedXmlFile, true); // update CoverageLines CoverageReport = CoberturaUtil.ProcessCoberturaXmlFile(unifiedXmlFile, out var coverageLines); CoverageLines = coverageLines; // update HtmlFilePath ReportGeneratorUtil.ProcessUnifiedHtmlFile(unifiedHtmlFile, darkMode, out var coverageHtml); HtmlFilePath = coverageHtml; }
public ReferencedProject(string projectPath) { this.projectPath = projectPath; AssemblyName = GetAssemblyName(XElementUtil.Load(projectPath, true), Path.GetFileNameWithoutExtension(projectPath)); }