get runnable projects

This commit is contained in:
Matt Parker
2025-08-07 23:53:18 +10:00
parent 58544133f6
commit 1243592fd3
3 changed files with 19 additions and 4 deletions

View File

@@ -27,5 +27,9 @@ public class SharpIdeProjectModel : ISharpIdeNode
public required List<SharpIdeFolder> Folders { get; set; }
public required List<SharpIdeFile> Files { get; set; }
public bool Expanded { get; set; }
public required Task<Project> MsBuildEvaluationProject { get; set; }
public required Task<Project> MsBuildEvaluationProjectTask { get; set; }
public Project MsBuildEvaluationProject => MsBuildEvaluationProjectTask.IsCompletedSuccessfully
? MsBuildEvaluationProjectTask.Result
: throw new InvalidOperationException("Do not attempt to access the MsBuildEvaluationProject before it has been loaded");
}

View File

@@ -41,7 +41,7 @@ public static class VsPersistenceMapper
FilePath = projectModel.FullFilePath,
Files = TreeMapperV2.GetFiles(projectModel.FullFilePath),
Folders = TreeMapperV2.GetSubFolders(projectModel.FullFilePath),
MsBuildEvaluationProject = Test.GetProject(projectModel.FullFilePath)
MsBuildEvaluationProjectTask = Test.GetProject(projectModel.FullFilePath)
};
allProjects.Add(project);
return project;

View File

@@ -7,9 +7,9 @@
<MudIcon Icon="@Icons.Material.Filled.PlayArrow" Size="Size.Medium" Color="Color.Default"/>
</MudButton>
<MudList T="string" Dense="true" Class="pa-0 ma-0">
@if (SolutionModel?.AllProjects?.Count is >= 0)
@if (_ready)
{
@foreach (var project in SolutionModel.AllProjects)
@foreach (var project in RunnableProjects)
{
<MudListItem T="string" Dense="true" Class="pa-0 ma-0 pl-2" Style="max-height: 36px;">
<MudStack Row="true" Spacing="1" AlignItems="AlignItems.Center" Class="pa-0 ma-0">
@@ -35,5 +35,16 @@
[Parameter, EditorRequired]
public SharpIdeSolutionModel SolutionModel { get; set; } = null!;
private IEnumerable<SharpIdeProjectModel> RunnableProjects => SolutionModel.AllProjects.Where(p => p.MsBuildEvaluationProject.GetPropertyValue("OutputType") is "Exe" or "WinExe");
private bool _open = false;
private bool _ready = false;
protected override async Task OnInitializedAsync()
{
var tasks = SolutionModel.AllProjects.Select(p => p.MsBuildEvaluationProjectTask).ToList();
await Task.WhenAll(tasks);
_ready = true;
}
}