Add BuildService

This commit is contained in:
Matt Parker
2025-07-31 20:11:54 +10:00
parent 898a83faf5
commit 6975146579
3 changed files with 50 additions and 29 deletions

View File

@@ -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<string, string?>(),
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"]);

View File

@@ -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
<MudLayout>
<MudAppBar Dense="true">
@@ -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<string, string?>(),
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);
}
}

View File

@@ -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<RefreshOpenFileService>();
appBuilder.Services.AddSingleton<AppState>();
appBuilder.Services.AddSingleton<BuildService>();
appBuilder.RootComponents.Add<App>("app");