Add Photino project
This commit is contained in:
8
DotNetSolutionTools.Core/Models/Project.cs
Normal file
8
DotNetSolutionTools.Core/Models/Project.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace DotNetSolutionTools.Core.Models;
|
||||
|
||||
public class Project
|
||||
{
|
||||
public required string FullPath { get; set; }
|
||||
public required string Name { get; set; }
|
||||
public List<Project> DependsOn { get; set; } = [];
|
||||
}
|
||||
52
DotNetSolutionTools.Core/SolutionBuildOrder.cs
Normal file
52
DotNetSolutionTools.Core/SolutionBuildOrder.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using DotNetSolutionTools.Core.Common;
|
||||
using DotNetSolutionTools.Core.Models;
|
||||
using Microsoft.Build.Construction;
|
||||
|
||||
namespace DotNetSolutionTools.Core;
|
||||
|
||||
public static class SolutionBuildOrder
|
||||
{
|
||||
public static List<ProjectRootElement> Projects { get; set; } = [];
|
||||
|
||||
public static List<Project> GetBuildOrder(string solutionFilePath)
|
||||
{
|
||||
var solutionFile = SlnHelper.ParseSolutionFileFromPath(solutionFilePath);
|
||||
ArgumentNullException.ThrowIfNull(solutionFile);
|
||||
var projects = SlnHelper.GetCSharpProjectObjectsFromSolutionFile(solutionFile);
|
||||
Projects = projects;
|
||||
|
||||
List<Project> projects2 = [];
|
||||
foreach (var project in projects)
|
||||
{
|
||||
var projectName = Path.GetFileNameWithoutExtension(project.FullPath);
|
||||
var project2 = new Project { FullPath = project.FullPath, Name = projectName };
|
||||
project2.DependsOn = GetDependencies(project2);
|
||||
projects2.Add(project2);
|
||||
}
|
||||
|
||||
return projects2;
|
||||
}
|
||||
|
||||
public static List<Project> GetDependencies(Project project)
|
||||
{
|
||||
var projectReferences = Projects
|
||||
.Single(s => s.FullPath == project.FullPath)
|
||||
.AllChildren.OfType<ProjectItemElement>()
|
||||
.Where(x => x.ElementName == "ProjectReference")
|
||||
.ToList();
|
||||
|
||||
List<Project> dependencies = [];
|
||||
foreach (var projectReference in projectReferences)
|
||||
{
|
||||
var fullPath = Path.Combine(Path.GetDirectoryName(project.FullPath)!, projectReference.Include);
|
||||
fullPath = Path.GetFullPath(fullPath);
|
||||
var dependency = Projects.Single(s => s.FullPath == fullPath);
|
||||
var projectName = Path.GetFileNameWithoutExtension(dependency.FullPath);
|
||||
var subProject = new Project { FullPath = dependency.FullPath, Name = projectName };
|
||||
subProject.DependsOn = GetDependencies(subProject);
|
||||
dependencies.Add(subProject);
|
||||
}
|
||||
|
||||
return dependencies;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user