dotnet-installer/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/PublishCommand.cs

127 lines
4.5 KiB
C#
Raw Normal View History

2015-12-15 01:39:29 +00:00
// 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 Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.ProjectModel;
using Microsoft.Extensions.PlatformAbstractions;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
2016-04-08 23:27:09 +00:00
using System.Threading.Tasks;
2015-12-15 01:39:29 +00:00
namespace Microsoft.DotNet.Tools.Test.Utilities
2015-12-15 01:39:29 +00:00
{
public sealed class PublishCommand : TestCommand
{
2016-02-16 23:30:39 +00:00
private const string PublishSubfolderName = "publish";
private readonly Project _project;
private readonly string _path;
private readonly string _framework;
private readonly string _runtime;
private readonly string _config;
2016-03-29 21:15:26 +00:00
private readonly bool _noBuild;
private readonly string _output;
private readonly string _buidBasePathDirectory;
2015-12-15 01:39:29 +00:00
public PublishCommand(string projectPath,
string framework = "",
string runtime = "",
string output = "",
string config = "",
bool noBuild = false,
string buildBasePath = "")
2015-12-15 01:39:29 +00:00
: base("dotnet")
{
_path = projectPath;
_project = ProjectReader.GetProject(projectPath);
_framework = framework;
_runtime = runtime;
_output = output;
_config = config;
2016-03-29 21:15:26 +00:00
_noBuild = noBuild;
_buidBasePathDirectory = buildBasePath;
2015-12-15 01:39:29 +00:00
}
2016-04-08 23:27:09 +00:00
public override Task<CommandResult> ExecuteAsync(string args = "")
{
args = $"publish {BuildArgs()} {args}";
return base.ExecuteAsync(args);
}
public override CommandResult Execute(string args = "")
{
2015-12-15 01:39:29 +00:00
args = $"publish {BuildArgs()} {args}";
return base.Execute(args);
}
public override CommandResult ExecuteWithCapturedOutput(string args = "")
{
args = $"publish {BuildArgs()} {args}";
return base.ExecuteWithCapturedOutput(args);
}
public string ProjectName => _project.Name;
2015-12-15 01:39:29 +00:00
private string BuildRelativeOutputPath(bool portable)
2015-12-15 01:39:29 +00:00
{
// lets try to build an approximate output path
2015-12-15 01:39:29 +00:00
string config = string.IsNullOrEmpty(_config) ? "Debug" : _config;
string framework = string.IsNullOrEmpty(_framework) ?
2015-12-15 01:39:29 +00:00
_project.GetTargetFrameworks().First().FrameworkName.GetShortFolderName() : _framework;
if (!portable)
{
var runtime = string.IsNullOrEmpty(_runtime) ? PlatformServices.Default.Runtime.GetLegacyRestoreRuntimeIdentifier() : _runtime;
return Path.Combine(config, framework, runtime, PublishSubfolderName);
}
else
{
return Path.Combine(config, framework, PublishSubfolderName);
}
2015-12-15 01:39:29 +00:00
}
public DirectoryInfo GetOutputDirectory(bool portable = false)
2015-12-15 01:39:29 +00:00
{
if (!string.IsNullOrEmpty(_output))
{
return new DirectoryInfo(_output);
2015-12-15 01:39:29 +00:00
}
string output = Path.Combine(_project.ProjectDirectory, "bin", BuildRelativeOutputPath(portable));
2015-12-15 01:39:29 +00:00
return new DirectoryInfo(output);
}
public string GetPortableOutputName()
{
return $"{_project.Name}.dll";
}
2015-12-15 01:39:29 +00:00
public string GetOutputExecutable()
{
return _project.Name + GetExecutableExtension();
}
public string GetExecutableExtension()
{
2016-04-21 20:41:22 +00:00
#if NET451
return ".exe";
#else
return RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : "";
2016-04-21 20:41:22 +00:00
#endif
2015-12-15 01:39:29 +00:00
}
private string BuildArgs()
{
return $"{_path} {FrameworkOption} {RuntimeOption} {OutputOption} {ConfigOption} {NoBuildFlag} {BuildBasePathOption}";
2015-12-15 01:39:29 +00:00
}
private string FrameworkOption => string.IsNullOrEmpty(_framework) ? "" : $"-f {_framework}";
private string RuntimeOption => string.IsNullOrEmpty(_runtime) ? "" : $"-r {_runtime}";
private string OutputOption => string.IsNullOrEmpty(_output) ? "" : $"-o \"{_output}\"";
private string ConfigOption => string.IsNullOrEmpty(_config) ? "" : $"-c {_output}";
2016-03-29 21:15:26 +00:00
private string NoBuildFlag => _noBuild ? "--no-build" :"";
private string BuildBasePathOption => string.IsNullOrEmpty(_buidBasePathDirectory) ? "" : $"-b {_buidBasePathDirectory}";
2015-12-15 01:39:29 +00:00
}
}