File: Commands\Run\RunCommandDefinition.cs
Web Access
Project: src\src\sdk\src\Cli\Microsoft.DotNet.Cli.Definitions\Microsoft.DotNet.Cli.Definitions.csproj (Microsoft.DotNet.Cli.Definitions)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Collections.ObjectModel;
using System.CommandLine;
using Microsoft.DotNet.Cli.CommandLine;

namespace Microsoft.DotNet.Cli.Commands.Run;

internal sealed class RunCommandDefinition : Command
{
    private const string Link = "https://aka.ms/dotnet-run";

    public readonly Option<string?> ConfigurationOption = CommonOptions.CreateConfigurationOption(CommandDefinitionStrings.RunConfigurationOptionDescription);

    public readonly Option<string> FrameworkOption = CommonOptions.CreateFrameworkOption(CommandDefinitionStrings.RunFrameworkOptionDescription);

    public readonly TargetPlatformOptions TargetPlatformOptions = new(CommandDefinitionStrings.RunRuntimeOptionDescription);

    public readonly Option<string> ProjectOption = new("--project")
    {
        Description = CommandDefinitionStrings.CmdProjectDescriptionFormat,
        HelpName = CommandDefinitionStrings.CommandOptionProjectHelpName
    };

    public readonly Option<string> FileOption = new("--file")
    {
        Description = CommandDefinitionStrings.CommandOptionFileDescription,
        HelpName = CommandDefinitionStrings.CommandOptionFileHelpName,
    };

    public readonly Option<ReadOnlyDictionary<string, string>?> PropertyOption = CommonOptions.CreatePropertyOption();

    public readonly Option<string> LaunchProfileOption = new("--launch-profile", "-lp")
    {
        Description = CommandDefinitionStrings.CommandOptionLaunchProfileDescription,
        HelpName = CommandDefinitionStrings.CommandOptionLaunchProfileHelpName
    };

    public readonly Option<bool> NoLaunchProfileOption = new("--no-launch-profile")
    {
        Description = CommandDefinitionStrings.CommandOptionNoLaunchProfileDescription,
        Arity = ArgumentArity.Zero
    };

    public readonly Option<bool> NoLaunchProfileArgumentsOption = new("--no-launch-profile-arguments")
    {
        Description = CommandDefinitionStrings.CommandOptionNoLaunchProfileArgumentsDescription
    };

    public readonly Option<string> DeviceOption = new("--device")
    {
        Description = CommandDefinitionStrings.CommandOptionDeviceDescription,
        HelpName = CommandDefinitionStrings.CommandOptionDeviceHelpName
    };

    public readonly Option<bool> ListDevicesOption = new("--list-devices")
    {
        Description = CommandDefinitionStrings.CommandOptionListDevicesDescription,
        Arity = ArgumentArity.Zero
    };

    public const string NoBuildOptionName = "--no-build";

    public readonly Option<bool> NoBuildOption = new(NoBuildOptionName)
    {
        Description = CommandDefinitionStrings.CommandOptionNoBuildDescription,
        Arity = ArgumentArity.Zero
    };

    public readonly Option<bool> NoRestoreOption = CommonOptions.CreateNoRestoreOption();

    public readonly Option<bool> InteractiveOption = CommonOptions.CreateInteractiveMsBuildForwardOption();

    public const string NoCacheOptionName = "--no-cache";

    public readonly Option<bool> NoCacheOption = new(NoCacheOptionName)
    {
        Description = CommandDefinitionStrings.CommandOptionNoCacheDescription,
        Arity = ArgumentArity.Zero,
    };

    public readonly Option<bool> SelfContainedOption = CommonOptions.CreateSelfContainedOption();

    public readonly Option<bool> NoSelfContainedOption = CommonOptions.CreateNoSelfContainedOption();

    public readonly Option<Utils.VerbosityOptions?> VerbosityOption = CommonOptions.CreateVerbosityOption();

    public readonly Option<bool> DisableBuildServersOption = CommonOptions.CreateDisableBuildServersOption();

    public readonly Option<string> ArtifactsPathOption = CommonOptions.CreateArtifactsPathOption();

    public readonly Option<IReadOnlyDictionary<string, string>> EnvOption = CommonOptions.CreateEnvOption();

    public readonly Argument<string[]> ApplicationArguments = new("applicationArguments")
    {
        DefaultValueFactory = _ => [],
        Description = "Arguments passed to the application that is being run."
    };

    public RunCommandDefinition()
        : base("run", CommandDefinitionStrings.RunAppFullName)
    {
        this.DocsLink = Link;

        Options.Add(ConfigurationOption);
        Options.Add(FrameworkOption);
        Options.Add(ProjectOption);
        Options.Add(FileOption);
        Options.Add(PropertyOption);
        Options.Add(LaunchProfileOption);
        Options.Add(NoLaunchProfileOption);
        Options.Add(DeviceOption);
        Options.Add(ListDevicesOption);
        Options.Add(NoBuildOption);
        Options.Add(InteractiveOption);
        Options.Add(NoRestoreOption);
        Options.Add(NoCacheOption);
        Options.Add(SelfContainedOption);
        Options.Add(NoSelfContainedOption);
        Options.Add(VerbosityOption);
        TargetPlatformOptions.AddTo(Options);
        Options.Add(DisableBuildServersOption);
        Options.Add(ArtifactsPathOption);
        Options.Add(EnvOption);

        Arguments.Add(ApplicationArguments);
    }
}