MultiProjectValidator Fixes

Ignore desktop frameworks (if specified)
This commit is contained in:
Bryan 2016-01-07 17:10:45 -08:00
parent 2d70ffc508
commit d8b04851e6
7 changed files with 40 additions and 18 deletions

View file

@ -5,16 +5,16 @@ namespace MultiProjectValidator
public class AnalysisResult public class AnalysisResult
{ {
private List<string> _messages; private IEnumerable<string> _messages;
private bool _passed; private bool _passed;
public AnalysisResult(List<string> messages, bool passed) public AnalysisResult(IEnumerable<string> messages, bool passed)
{ {
_messages = messages; _messages = messages;
_passed = passed; _passed = passed;
} }
public List<string> Messages public IEnumerable<string> Messages
{ {
get get
{ {

View file

@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace ProjectSanity.AnalysisRules.DependencyMismatch namespace MultiProjectValidator.AnalysisRules.DependencyMismatch
{ {
internal class DependencyGroup internal class DependencyGroup
{ {

View file

@ -1,6 +1,6 @@
using Microsoft.DotNet.ProjectModel; using Microsoft.DotNet.ProjectModel;
namespace ProjectSanity.AnalysisRules.DependencyMismatch namespace MultiProjectValidator.AnalysisRules.DependencyMismatch
{ {
internal class DependencyInfo internal class DependencyInfo
{ {

View file

@ -3,24 +3,30 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using Microsoft.DotNet.ProjectModel; using Microsoft.DotNet.ProjectModel;
using System.Text; using System.Text;
using ProjectSanity.AnalysisRules.DependencyMismatch; using MultiProjectValidator.AnalysisRules.DependencyMismatch;
namespace MultiProjectValidator.AnalysisRules namespace MultiProjectValidator.AnalysisRules
{ {
public class DependencyMismatchRule : IAnalysisRule public class DependencyMismatchRule : IAnalysisRule
{ {
public AnalysisResult Evaluate(List<ProjectContext> projectContexts) public AnalysisResult Evaluate(IEnumerable<ProjectContext> projectContexts)
{ {
var targetGroupedContexts = GroupContextsByTarget(projectContexts); var filteredContexts = FilterContextList(projectContexts);
var targetGroupedContexts = GroupContextsByTarget(filteredContexts);
var failureMessages = EvaluateProjectContextTargetGroups(targetGroupedContexts); var failureMessages = EvaluateProjectContextTargetGroups(targetGroupedContexts);
var pass = failureMessages.Count == 0; var pass = failureMessages.Count() == 0;
var result = new AnalysisResult(failureMessages, pass); var result = new AnalysisResult(failureMessages, pass);
return result; return result;
} }
private List<string> EvaluateProjectContextTargetGroups(Dictionary<string, List<ProjectContext>> targetGroupedProjectContexts) private IEnumerable<ProjectContext> FilterContextList(IEnumerable<ProjectContext> projectContexts)
{
return projectContexts.Where(context=> !context.TargetIsDesktop());
}
private IEnumerable<string> EvaluateProjectContextTargetGroups(Dictionary<string, List<ProjectContext>> targetGroupedProjectContexts)
{ {
var failureMessages = new List<string>(); var failureMessages = new List<string>();
@ -42,13 +48,12 @@ namespace MultiProjectValidator.AnalysisRules
return failureMessages; return failureMessages;
} }
private List<string> EvaluateProjectContextTargetGroup(List<ProjectContext> targetProjectContextGroup) private List<string> EvaluateProjectContextTargetGroup(IEnumerable<ProjectContext> targetProjectContextGroup)
{ {
var failedMessages = new List<string>(); var failedMessages = new List<string>();
var dependencyGroups = CreateDependencyGroups(targetProjectContextGroup); var dependencyGroups = CreateDependencyGroups(targetProjectContextGroup);
foreach (var dependencyGroup in dependencyGroups) foreach (var dependencyGroup in dependencyGroups)
{ {
if(dependencyGroup.HasConflict) if(dependencyGroup.HasConflict)
@ -80,7 +85,7 @@ namespace MultiProjectValidator.AnalysisRules
return sb.ToString(); return sb.ToString();
} }
private Dictionary<string, List<ProjectContext>> GroupContextsByTarget(List<ProjectContext> projectContexts) private Dictionary<string, List<ProjectContext>> GroupContextsByTarget(IEnumerable<ProjectContext> projectContexts)
{ {
var targetContextMap = new Dictionary<string, List<ProjectContext>>(); var targetContextMap = new Dictionary<string, List<ProjectContext>>();
foreach (var context in projectContexts) foreach (var context in projectContexts)
@ -103,7 +108,7 @@ namespace MultiProjectValidator.AnalysisRules
return targetContextMap; return targetContextMap;
} }
private List<DependencyGroup> CreateDependencyGroups(List<ProjectContext> projectContexts) private List<DependencyGroup> CreateDependencyGroups(IEnumerable<ProjectContext> projectContexts)
{ {
var libraryNameDependencyGroupMap = new Dictionary<string, DependencyGroup>(); var libraryNameDependencyGroupMap = new Dictionary<string, DependencyGroup>();

View file

@ -5,6 +5,6 @@ namespace MultiProjectValidator
{ {
public interface IAnalysisRule public interface IAnalysisRule
{ {
AnalysisResult Evaluate(List<ProjectContext> projectContexts); AnalysisResult Evaluate(IEnumerable<ProjectContext> projectContexts);
} }
} }

View file

@ -0,0 +1,17 @@
using System.IO;
using System.Collections.Generic;
using Microsoft.DotNet.ProjectModel;
namespace MultiProjectValidator
{
public static class ProjectContextExtensions
{
private static readonly string s_desktopTfmPrefix = ".NETFramework";
public static bool TargetIsDesktop(this ProjectContext context)
{
var targetFramework = context.TargetFramework.ToString();
return targetFramework.StartsWith(s_desktopTfmPrefix);
}
}
}

View file

@ -6,7 +6,7 @@ namespace MultiProjectValidator
{ {
public class ProjectLoader public class ProjectLoader
{ {
private static readonly string PROJECT_FILENAME = "project.json"; private static readonly string s_projectFileName = "project.json";
public static List<ProjectContext> Load(string rootPath, bool recursive=true) public static List<ProjectContext> Load(string rootPath, bool recursive=true)
{ {
@ -18,7 +18,7 @@ namespace MultiProjectValidator
private static string[] DiscoverProjectFiles(string rootPath) private static string[] DiscoverProjectFiles(string rootPath)
{ {
return Directory.GetFiles(rootPath, PROJECT_FILENAME, SearchOption.AllDirectories); return Directory.GetFiles(rootPath, s_projectFileName, SearchOption.AllDirectories);
} }
private static List<ProjectContext> LoadProjectContexts(string[] projectFiles) private static List<ProjectContext> LoadProjectContexts(string[] projectFiles)
@ -29,7 +29,7 @@ namespace MultiProjectValidator
{ {
var fileTargetContexts = ProjectContext.CreateContextForEachTarget(file); var fileTargetContexts = ProjectContext.CreateContextForEachTarget(file);
projectContexts.AddRange(fileTargetContexts); projectContexts.AddRange(fileTargetContexts);
} }
return projectContexts; return projectContexts;