diff --git a/src/SharpIDE.Application/Features/Build/BuildService.cs b/src/SharpIDE.Application/Features/Build/BuildService.cs index d6dfa62..15499d6 100644 --- a/src/SharpIDE.Application/Features/Build/BuildService.cs +++ b/src/SharpIDE.Application/Features/Build/BuildService.cs @@ -18,7 +18,7 @@ public class BuildService { public event Func BuildStarted = () => Task.CompletedTask; public ChannelTextWriter BuildTextWriter { get; } = new ChannelTextWriter(); - public async Task MsBuildSolutionAsync(string solutionFilePath, BuildType buildType = BuildType.Build, CancellationToken cancellationToken = default) + public async Task MsBuildAsync(string solutionOrProjectFilePath, BuildType buildType = BuildType.Build, CancellationToken cancellationToken = default) { var normalOut = Console.Out; Console.SetOut(BuildTextWriter); @@ -41,7 +41,7 @@ public class BuildService var targetsToBuild = TargetsToBuild(buildType); var buildRequest = new BuildRequestData( - projectFullPath : solutionFilePath, + projectFullPath : solutionOrProjectFilePath, globalProperties: new Dictionary(), toolsVersion: null, targetsToBuild: targetsToBuild, diff --git a/src/SharpIDE.Godot/Features/SolutionExplorer/ContextMenus/ProjectContextMenu.cs b/src/SharpIDE.Godot/Features/SolutionExplorer/ContextMenus/ProjectContextMenu.cs index d71436f..ac34234 100644 --- a/src/SharpIDE.Godot/Features/SolutionExplorer/ContextMenus/ProjectContextMenu.cs +++ b/src/SharpIDE.Godot/Features/SolutionExplorer/ContextMenus/ProjectContextMenu.cs @@ -1,5 +1,8 @@ using Godot; +using SharpIDE.Application.Features.Build; +using SharpIDE.Application.Features.Events; using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence; +using SharpIDE.Godot.Features.BottomPanel; namespace SharpIDE.Godot.Features.SolutionExplorer; @@ -36,19 +39,19 @@ public partial class SolutionExplorerPanel } if (actionId is ProjectContextMenuOptions.Build) { - + _ = Task.GodotRun(async () => await MsBuildProject(project, BuildType.Build)); } else if (actionId is ProjectContextMenuOptions.Rebuild) { - + _ = Task.GodotRun(async () => await MsBuildProject(project, BuildType.Rebuild)); } else if (actionId is ProjectContextMenuOptions.Clean) { - + _ = Task.GodotRun(async () => await MsBuildProject(project, BuildType.Clean)); } else if (actionId is ProjectContextMenuOptions.Restore) { - + _ = Task.GodotRun(async () => await MsBuildProject(project, BuildType.Restore)); } }; @@ -56,4 +59,9 @@ public partial class SolutionExplorerPanel menu.Position = new Vector2I((int)globalMousePosition.X, (int)globalMousePosition.Y); menu.Popup(); } + private static async Task MsBuildProject(SharpIdeProjectModel project, BuildType buildType) + { + GodotGlobalEvents.Instance.BottomPanelTabExternallySelected.InvokeParallelFireAndForget(BottomPanelType.Build); + await Singletons.BuildService.MsBuildAsync(project.FilePath, buildType); + } } diff --git a/src/SharpIDE.Godot/IdeRoot.cs b/src/SharpIDE.Godot/IdeRoot.cs index 5beb4fe..82914e0 100644 --- a/src/SharpIDE.Godot/IdeRoot.cs +++ b/src/SharpIDE.Godot/IdeRoot.cs @@ -88,22 +88,22 @@ public partial class IdeRoot : Control private async void OnBuildSlnButtonPressed() { GodotGlobalEvents.Instance.BottomPanelTabExternallySelected.InvokeParallelFireAndForget(BottomPanelType.Build); - await Singletons.BuildService.MsBuildSolutionAsync(_solutionExplorerPanel.SolutionModel.FilePath); + await Singletons.BuildService.MsBuildAsync(_solutionExplorerPanel.SolutionModel.FilePath); } private async void OnRebuildSlnButtonPressed() { GodotGlobalEvents.Instance.BottomPanelTabExternallySelected.InvokeParallelFireAndForget(BottomPanelType.Build); - await Singletons.BuildService.MsBuildSolutionAsync(_solutionExplorerPanel.SolutionModel.FilePath, BuildType.Rebuild); + await Singletons.BuildService.MsBuildAsync(_solutionExplorerPanel.SolutionModel.FilePath, BuildType.Rebuild); } private async void OnCleanSlnButtonPressed() { GodotGlobalEvents.Instance.BottomPanelTabExternallySelected.InvokeParallelFireAndForget(BottomPanelType.Build); - await Singletons.BuildService.MsBuildSolutionAsync(_solutionExplorerPanel.SolutionModel.FilePath, BuildType.Clean); + await Singletons.BuildService.MsBuildAsync(_solutionExplorerPanel.SolutionModel.FilePath, BuildType.Clean); } private async void OnRestoreSlnButtonPressed() { GodotGlobalEvents.Instance.BottomPanelTabExternallySelected.InvokeParallelFireAndForget(BottomPanelType.Build); - await Singletons.BuildService.MsBuildSolutionAsync(_solutionExplorerPanel.SolutionModel.FilePath, BuildType.Restore); + await Singletons.BuildService.MsBuildAsync(_solutionExplorerPanel.SolutionModel.FilePath, BuildType.Restore); } private async Task OnSolutionExplorerPanelOnFileSelected(SharpIdeFile file, SharpIdeFileLinePosition? fileLinePosition) diff --git a/src/SharpIDE.Photino/Layout/MainLayout.razor b/src/SharpIDE.Photino/Layout/MainLayout.razor index a2fc24f..88c32aa 100644 --- a/src/SharpIDE.Photino/Layout/MainLayout.razor +++ b/src/SharpIDE.Photino/Layout/MainLayout.razor @@ -196,7 +196,7 @@ { if (AppState.IdeSettings.OpenTerminalOnBuildRebuildRestore) SelectBottomPanel(BottomPanelType.Build); _cancellationTokenSource = new CancellationTokenSource(); - await BuildService.MsBuildSolutionAsync(_solutionFilePath!, buildType, _cancellationTokenSource.Token); + await BuildService.MsBuildAsync(_solutionFilePath!, buildType, _cancellationTokenSource.Token); _cancellationTokenSource = null; } private async Task CancelBuild() => await _cancellationTokenSource!.CancelAsync();