// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System.Linq;
using System.Text;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.ProjectModel;
namespace Microsoft.DotNet.Tools.Pack
{
internal class BuildProjectCommand
private readonly Project _project;
private readonly ArtifactPathsCalculator _artifactPathsCalculator;
private readonly string _intermediateOutputPath;
private readonly string _configuration;
private bool SkipBuild => _artifactPathsCalculator.CompiledArtifactsPathSet;
public BuildProjectCommand(
Project project,
ArtifactPathsCalculator artifactPathsCalculator,
string intermediateOutputPath,
string configuration)
_project = project;
_artifactPathsCalculator = artifactPathsCalculator;
_intermediateOutputPath = intermediateOutputPath;
_configuration = configuration;
}
public int Execute()
if (SkipBuild)
return 0;
if (_project.Files.SourceFiles.Any())
var argsBuilder = new StringBuilder();
argsBuilder.Append($"--configuration {_configuration}");
if (_artifactPathsCalculator.PackageOutputPathSet)
argsBuilder.Append($" --output \"{_artifactPathsCalculator.PackageOutputPathParameter}\"");
if (!string.IsNullOrEmpty(_intermediateOutputPath))
argsBuilder.Append($" --temp-output \"{_intermediateOutputPath}\"");
argsBuilder.Append($" \"{_project.ProjectFilePath}\"");
var result = Command.Create("dotnet-build", argsBuilder.ToString())
.ForwardStdOut()
.ForwardStdErr()
.Execute();
return result.ExitCode;