| File: Commands\Publish\PublishCommand.cs | Web Access |
| Project: src\sdk\src\Cli\dotnet\dotnet.csproj (dotnet) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.CommandLine; using System.Diagnostics.CodeAnalysis; using Microsoft.DotNet.Cli.CommandLine; using Microsoft.DotNet.Cli.Commands.Restore; using Microsoft.DotNet.Cli.Commands.Run; using Microsoft.DotNet.Cli.Extensions; using Microsoft.DotNet.Cli.Utils; namespace Microsoft.DotNet.Cli.Commands.Publish; [RequiresDynamicCode("Uses MSBuild Object Model types, which are not AOT-safe")] public class PublishCommand : RestoringCommand { private PublishCommand( MSBuildArgs msbuildArgs, bool noRestore, string? msbuildPath = null) : base(msbuildArgs, noRestore, msbuildPath) { } public static CommandBase FromArgs(string[] args, string? msbuildPath = null) { var parseResult = Parser.Parse(["dotnet", "publish", .. args]); return FromParseResult(parseResult); } public static CommandBase FromParseResult(ParseResult parseResult, string? msbuildPath = null) { var definition = (PublishCommandDefinition)parseResult.CommandResult.Command; parseResult.HandleDebugSwitch(); parseResult.ShowHelpOrErrorIfAppropriate(); CommonOptions.ValidateSelfContainedOptions(parseResult.HasOption(definition.SelfContainedOption), parseResult.HasOption(definition.NoSelfContainedOption)); bool noBuild = parseResult.HasOption(definition.NoBuildOption); bool noRestore = noBuild || parseResult.HasOption(definition.NoRestoreOption); return DotNetCommandFactory.CreateVirtualOrPhysicalCommand( definition, definition.SlnOrProjectOrFileArgument, (msbuildArgs, appFilePath) => new VirtualProjectBuildingCommand( entryPointFileFullPath: Path.GetFullPath(appFilePath), msbuildArgs: msbuildArgs) { NoBuild = noBuild, NoRestore = noRestore, NoCache = true, }, (msbuildArgs, msbuildPath) => new PublishCommand( msbuildArgs: msbuildArgs, noRestore: noRestore, msbuildPath: msbuildPath ), optionsToUseWhenParsingMSBuildFlags: [ CommonOptions.CreatePropertyOption(), CommonOptions.CreateRestorePropertyOption(), PublishCommandDefinition.CreateTargetOption(), CommonOptions.CreateVerbosityOption(), CommonOptions.CreateNoLogoOption() ], parseResult, msbuildPath, transformer: (msbuildArgs, nonLoggerArgs) => { var options = new ReleasePropertyProjectLocator.DependentCommandOptions( nonLoggerArgs, parseResult.HasOption(definition.ConfigurationOption) ? parseResult.GetValue(definition.ConfigurationOption) : null, parseResult.HasOption(definition.FrameworkOption) ? parseResult.GetValue(definition.FrameworkOption) : null ); var projectLocator = new ReleasePropertyProjectLocator(msbuildArgs.GlobalProperties, MSBuildPropertyNames.PUBLISH_RELEASE, options); var releaseModeProperties = projectLocator.GetCustomDefaultConfigurationValueIfSpecified(); return msbuildArgs.CloneWithAdditionalProperties(releaseModeProperties); } ); } public static int Run(ParseResult parseResult) { parseResult.HandleDebugSwitch(); return FromParseResult(parseResult).Execute(); } }