/// <summary> /// Calculates the loc for the whole solution. /// </summary> /// <param name="solutionFileName">Name of the solution file.</param> public void CalculateLocForSolution(string solutionFileName) { //VSSolutionLocMetrics metrics = new VSSolutionLocMetrics(); //Load the solution, appropriate projects and their compile items. VSSolution solution = VSSolution.Load(solutionFileName); solution.LoadProjects(); foreach (VSProjectInfo projectInfo in solution.Projects) { //just C# projects if (projectInfo.ProjectTypeGuid != VSProjectType.CSharpProjectType.ProjectTypeGuid) { continue; } //Calculate the metrics for each containing project. VSProjectLocMetrics projectMetrics = VSProjectLocMetrics.CalculateLocForProject( (VSProjectWithFileInfo)projectInfo, locStatsMap); this.AddLocMetrics(projectMetrics); } locCalculated = true; }
/// <summary> /// Calculates the loc metrics for the whole project. /// </summary> /// <param name="projectWithFileInfo">The project info.</param> /// <param name="map">The map of <see cref="ILocStats"/> objects which can calculate LoC metrics for different source file types.</param> /// <returns> /// Returns the VSProjectLocMetrics instance. /// </returns> public static VSProjectLocMetrics CalculateLocForProject(VSProjectWithFileInfo projectWithFileInfo, LocStatsMap map) { VSProjectLocMetrics projectMetrics = new VSProjectLocMetrics(projectWithFileInfo); //For each Item file in project foreach (VSProjectItem item in projectWithFileInfo.Project.Items) { if (item.ItemType == VSProjectItem.CompileItem || item.ItemType == VSProjectItem.Content) { string filePath = Path.Combine( projectMetrics.ProjectWithFileInfo.ProjectDirectoryPath, item.Item); SourceFileLocMetrics sourceFile = SourceFileLocMetrics.CalcLocStatData(filePath, map); // make sure the file was not ignored (it wasn't a source file) if (sourceFile != null) { projectMetrics.AddLocMetrics(sourceFile); } } } return(projectMetrics); }