From 6975146579a9599a591dce3901d700b42ed74372 Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Thu, 31 Jul 2025 20:11:54 +1000 Subject: [PATCH] Add BuildService --- .../Features/Build/BuildService.cs | 45 +++++++++++++++++++ src/SharpIDE.Photino/Layout/MainLayout.razor | 32 ++----------- src/SharpIDE.Photino/Program.cs | 2 + 3 files changed, 50 insertions(+), 29 deletions(-) create mode 100644 src/SharpIDE.Application/Features/Build/BuildService.cs diff --git a/src/SharpIDE.Application/Features/Build/BuildService.cs b/src/SharpIDE.Application/Features/Build/BuildService.cs new file mode 100644 index 0000000..24e23aa --- /dev/null +++ b/src/SharpIDE.Application/Features/Build/BuildService.cs @@ -0,0 +1,45 @@ +using System.Diagnostics; +using Microsoft.Build.Execution; +using Microsoft.Build.Framework; +using Microsoft.Build.Logging; + +namespace SharpIDE.Application.Features.Build; + +public class BuildService +{ + public async Task BuildSolutionAsync(string solutionFilePath) + { + var buildParameters = new BuildParameters + { + Loggers = + [ + //new BinaryLogger { Parameters = "msbuild.binlog" }, + new ConsoleLogger(LoggerVerbosity.Quiet), + ], + }; + var buildRequest = new BuildRequestData( + projectFullPath : solutionFilePath, + globalProperties: new Dictionary(), + toolsVersion: null, + targetsToBuild: ["Restore", "Build"], + hostServices: null, + flags: BuildRequestDataFlags.None); + + await Task.Run(() => + { + var timer = Stopwatch.StartNew(); + var buildResult = BuildManager.DefaultBuildManager.Build(buildParameters, buildRequest); + timer.Stop(); + Console.WriteLine($"Build result: {buildResult.OverallResult} in {timer.ElapsedMilliseconds}ms"); + }).ConfigureAwait(false); + } +} + +// To build a single project +// var solutionFile = GetNodesInSolution.ParseSolutionFileFromPath(_solutionFilePath); +// ArgumentNullException.ThrowIfNull(solutionFile); +// var projects = GetNodesInSolution.GetCSharpProjectObjectsFromSolutionFile(solutionFile); +// var projectRoot = projects.First(); +// var buildRequest = new BuildRequestData( +// ProjectInstance.FromProjectRootElement(projectRoot, new ProjectOptions()), +// targetsToBuild: ["Restore", "Build"]); diff --git a/src/SharpIDE.Photino/Layout/MainLayout.razor b/src/SharpIDE.Photino/Layout/MainLayout.razor index 14dd6fb..5e56b81 100644 --- a/src/SharpIDE.Photino/Layout/MainLayout.razor +++ b/src/SharpIDE.Photino/Layout/MainLayout.razor @@ -1,12 +1,8 @@ -@using Microsoft.Build.Construction -@using Microsoft.Build.Definition -@using Microsoft.Build.Execution -@using Microsoft.Build.Framework -@using Microsoft.Build.Logging -@using SharpIDE.Application.Features.SolutionDiscovery +@using SharpIDE.Application.Features.Build @inherits LayoutComponentBase @inject IDialogService DialogService +@inject BuildService BuildService @@ -49,28 +45,6 @@ var solutionFilePath = (string)result.Data!; _solutionFilePath = solutionFilePath; - var buildParameters = new BuildParameters - { - Loggers = - [ - //new BinaryLogger { Parameters = "msbuild.binlog" }, - new ConsoleLogger(LoggerVerbosity.Quiet), - ], - }; - // var solutionFile = GetNodesInSolution.ParseSolutionFileFromPath(_solutionFilePath); - // ArgumentNullException.ThrowIfNull(solutionFile); - // var projects = GetNodesInSolution.GetCSharpProjectObjectsFromSolutionFile(solutionFile); - // var projectRoot = projects.First(); - // var buildRequest = new BuildRequestData( - // ProjectInstance.FromProjectRootElement(projectRoot, new ProjectOptions()), - // targetsToBuild: ["Restore", "Build"]); - var buildRequest = new BuildRequestData(projectFullPath : _solutionFilePath, - globalProperties: new Dictionary(), - toolsVersion: null, - targetsToBuild: ["Restore", "Build"], - hostServices: null, - flags: BuildRequestDataFlags.None); - var result2 = BuildManager.DefaultBuildManager.Build(buildParameters, buildRequest); - Console.WriteLine(result2.OverallResult); + await BuildService.BuildSolutionAsync(_solutionFilePath); } } diff --git a/src/SharpIDE.Photino/Program.cs b/src/SharpIDE.Photino/Program.cs index 87e41f6..1284719 100644 --- a/src/SharpIDE.Photino/Program.cs +++ b/src/SharpIDE.Photino/Program.cs @@ -3,6 +3,7 @@ using Microsoft.Build.Locator; using Microsoft.Extensions.DependencyInjection; using MudBlazor.Services; using Photino.Blazor; +using SharpIDE.Application.Features.Build; using SharpIDE.Photino.Models; using SharpIDE.Photino.Services; @@ -19,6 +20,7 @@ public class Program appBuilder.Services.AddMudServices(); appBuilder.Services.AddSingleton(); appBuilder.Services.AddSingleton(); + appBuilder.Services.AddSingleton(); appBuilder.RootComponents.Add("app");