@using Microsoft.Build.Construction
@using SharpIDE.Application.Features.SolutionDiscovery
@if (_solutionFile is null)
{
return;
}
@foreach(var project in _rootNodes)
{
@GetProjectFragment(project)
}
@code {
private SolutionFile _solutionFile = null!;
private List _rootNodes = [];
private Dictionary _folders = new();
private RenderFragment GetProjectFragment(ProjectInSolution project) =>
@
@foreach(var child in _solutionFile.ProjectsByGuid.Values.Where(s => s.ParentProjectGuid == project.ProjectGuid).OrderBy(s => s.ProjectName))
{
@GetProjectFragment(child)
}
@if (_folders.GetValueOrDefault(project.ProjectGuid, null) is {} value)
{
@GetFolderFragment(value)
}
;
private RenderFragment GetFolderFragment(Folder folder) =>
@
@foreach (var subFolder in folder.Folders)
{
@if (subFolder.Expanded)
{
@GetFolderFragment(subFolder)
}
}
@foreach (var file in folder.Files)
{
}
;
protected override async Task OnInitializedAsync()
{
await Task.Run(() => LoadSolution("C:/Users/Matthew/Documents/Git/amazon/ClientPortal.sln"));
}
private void LoadSolution(string solutionPath)
{
var solutionFile = GetNodesInSolution.ParseSolutionFileFromPath("C:/Users/Matthew/Documents/Git/amazon/ClientPortal.sln");
ArgumentNullException.ThrowIfNull(solutionFile);
_solutionFile = solutionFile;
var rootNodes = solutionFile.ProjectsByGuid.Values.Where(p => p.ParentProjectGuid == null).OrderBy(s => s.ProjectName).ToList();
_rootNodes = rootNodes;
var folders2 = _solutionFile.ProjectsByGuid.Values
.Where(s => s.ProjectType == SolutionProjectType.KnownToBeMSBuildFormat)
//.Take(2)
.Select(s =>
{
var rootFolder = new Folder
{
Name = Path.GetFileNameWithoutExtension(s.AbsolutePath),
Path = Path.GetDirectoryName(s.AbsolutePath)!,
IsPseudoFolder = false
};
rootFolder.Folders = rootFolder.GetSubFolders();
return (s, rootFolder);
})
.ToDictionary(s => s.s.ProjectGuid, s => s.Item2);
_folders = folders2!;
}
}