Add BuildService
This commit is contained in:
45
src/SharpIDE.Application/Features/Build/BuildService.cs
Normal file
45
src/SharpIDE.Application/Features/Build/BuildService.cs
Normal 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"]);
|
||||||
@@ -1,12 +1,8 @@
|
|||||||
@using Microsoft.Build.Construction
|
@using SharpIDE.Application.Features.Build
|
||||||
@using Microsoft.Build.Definition
|
|
||||||
@using Microsoft.Build.Execution
|
|
||||||
@using Microsoft.Build.Framework
|
|
||||||
@using Microsoft.Build.Logging
|
|
||||||
@using SharpIDE.Application.Features.SolutionDiscovery
|
|
||||||
@inherits LayoutComponentBase
|
@inherits LayoutComponentBase
|
||||||
|
|
||||||
@inject IDialogService DialogService
|
@inject IDialogService DialogService
|
||||||
|
@inject BuildService BuildService
|
||||||
|
|
||||||
<MudLayout>
|
<MudLayout>
|
||||||
<MudAppBar Dense="true">
|
<MudAppBar Dense="true">
|
||||||
@@ -49,28 +45,6 @@
|
|||||||
var solutionFilePath = (string)result.Data!;
|
var solutionFilePath = (string)result.Data!;
|
||||||
_solutionFilePath = solutionFilePath;
|
_solutionFilePath = solutionFilePath;
|
||||||
|
|
||||||
var buildParameters = new BuildParameters
|
await BuildService.BuildSolutionAsync(_solutionFilePath);
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using Microsoft.Build.Locator;
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using MudBlazor.Services;
|
using MudBlazor.Services;
|
||||||
using Photino.Blazor;
|
using Photino.Blazor;
|
||||||
|
using SharpIDE.Application.Features.Build;
|
||||||
using SharpIDE.Photino.Models;
|
using SharpIDE.Photino.Models;
|
||||||
using SharpIDE.Photino.Services;
|
using SharpIDE.Photino.Services;
|
||||||
|
|
||||||
@@ -19,6 +20,7 @@ public class Program
|
|||||||
appBuilder.Services.AddMudServices();
|
appBuilder.Services.AddMudServices();
|
||||||
appBuilder.Services.AddSingleton<RefreshOpenFileService>();
|
appBuilder.Services.AddSingleton<RefreshOpenFileService>();
|
||||||
appBuilder.Services.AddSingleton<AppState>();
|
appBuilder.Services.AddSingleton<AppState>();
|
||||||
|
appBuilder.Services.AddSingleton<BuildService>();
|
||||||
|
|
||||||
appBuilder.RootComponents.Add<App>("app");
|
appBuilder.RootComponents.Add<App>("app");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user