diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props
index 6b9a25fe7..3e654b15d 100644
--- a/build/DependencyVersions.props
+++ b/build/DependencyVersions.props
@@ -16,7 +16,7 @@
1.0.0-beta1-20170209-117
1.0.3
1.0.3
- 0.1.0-alpha-74
+ 0.1.0-alpha-84
diff --git a/src/Microsoft.DotNet.Cli.Utils/PathUtility.cs b/src/Microsoft.DotNet.Cli.Utils/PathUtility.cs
index 6e970a835..74d418ffa 100644
--- a/src/Microsoft.DotNet.Cli.Utils/PathUtility.cs
+++ b/src/Microsoft.DotNet.Cli.Utils/PathUtility.cs
@@ -313,9 +313,12 @@ namespace Microsoft.DotNet.Tools.Common
return Path.GetFullPath(path);
}
- public static void EnsureAllPathsExist(List paths, string pathDoesNotExistLocalizedFormatString)
+ public static void EnsureAllPathsExist(
+ IReadOnlyCollection paths,
+ string pathDoesNotExistLocalizedFormatString)
{
var notExisting = new List();
+
foreach (var p in paths)
{
if (!File.Exists(p))
@@ -329,7 +332,7 @@ namespace Microsoft.DotNet.Tools.Common
throw new GracefulException(
string.Join(
Environment.NewLine,
- notExisting.Select((p) => string.Format(pathDoesNotExistLocalizedFormatString, p))));
+ notExisting.Select(p => string.Format(pathDoesNotExistLocalizedFormatString, p))));
}
}
}
diff --git a/src/dotnet/CommandBase.cs b/src/dotnet/CommandBase.cs
new file mode 100644
index 000000000..ce9bb13e3
--- /dev/null
+++ b/src/dotnet/CommandBase.cs
@@ -0,0 +1,10 @@
+// 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.
+
+namespace Microsoft.DotNet.Cli
+{
+ public abstract class CommandBase
+ {
+ public abstract int Execute();
+ }
+}
\ No newline at end of file
diff --git a/src/dotnet/CommonOptions.cs b/src/dotnet/CommonOptions.cs
index 7b7fcf792..174484253 100644
--- a/src/dotnet/CommonOptions.cs
+++ b/src/dotnet/CommonOptions.cs
@@ -11,7 +11,7 @@ namespace Microsoft.DotNet.Cli
Create.Option(
"-h|--help",
"Show help information",
- Accept.NoArguments,
+ Accept.NoArguments(),
materialize: o => o.Option.Command().HelpView());
public static Option VerbosityOption() =>
diff --git a/src/dotnet/DotNetSubCommandBase.cs b/src/dotnet/DotNetSubCommandBase.cs
deleted file mode 100644
index 82d28ab6a..000000000
--- a/src/dotnet/DotNetSubCommandBase.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-// 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.CommandLine;
-
-namespace Microsoft.DotNet.Cli
-{
- internal abstract class DotNetSubCommandBase : CommandLineApplication
- {
- internal DotNetSubCommandBase() : base(throwOnUnexpectedArg: false)
- {
- }
-
- public abstract int Run(string fileOrDirectory);
- }
-}
diff --git a/src/dotnet/DotNetTopLevelCommandBase.cs b/src/dotnet/DotNetTopLevelCommandBase.cs
index 640d8dccc..319c66523 100644
--- a/src/dotnet/DotNetTopLevelCommandBase.cs
+++ b/src/dotnet/DotNetTopLevelCommandBase.cs
@@ -3,12 +3,9 @@
using System;
using System.Collections.Generic;
-using System.IO;
using System.Linq;
using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Utils;
-using Microsoft.DotNet.Tools;
-using Microsoft.DotNet.Tools.Common;
namespace Microsoft.DotNet.Cli
{
@@ -18,60 +15,34 @@ namespace Microsoft.DotNet.Cli
protected abstract string FullCommandNameLocalized { get; }
protected abstract string ArgumentName { get; }
protected abstract string ArgumentDescriptionLocalized { get; }
- internal abstract List> SubCommands { get; }
+ internal abstract Dictionary> SubCommands { get; }
public int RunCommand(string[] args)
{
DebugHelper.HandleDebugSwitch(ref args);
- CommandLineApplication command = new CommandLineApplication(throwOnUnexpectedArg: true)
- {
- Name = $"dotnet {CommandName}",
- FullName = FullCommandNameLocalized,
- };
+ var parser = Parser.Instance;
- command.HelpOption("-h|--help");
+ var result = parser.ParseFrom($"dotnet {CommandName}", args);
- command.Argument(ArgumentName, ArgumentDescriptionLocalized);
+ Reporter.Output.WriteLine(result.Diagram());
- foreach (var subCommandCreator in SubCommands)
- {
- var subCommand = subCommandCreator();
- command.AddCommand(subCommand);
+ result.ShowHelpIfRequested();
- subCommand.OnExecute(() => {
- try
- {
- if (!command.Arguments.Any())
- {
- throw new GracefulException(CommonLocalizableStrings.RequiredArgumentNotPassed, ArgumentDescriptionLocalized);
- }
+ var subcommandName = result.Command().Name;
- var projectOrDirectory = command.Arguments.First().Value;
- if (string.IsNullOrEmpty(projectOrDirectory))
- {
- projectOrDirectory = PathUtility.EnsureTrailingSlash(Directory.GetCurrentDirectory());
- }
+ var create = SubCommands[subcommandName];
- return subCommand.Run(projectOrDirectory);
- }
- catch (GracefulException e)
- {
- Reporter.Error.WriteLine(e.Message.Red());
- subCommand.ShowHelp();
- return 1;
- }
- });
- }
+ var command = create(result["dotnet"][CommandName]);
try
{
- return command.Execute(args);
+ return command.Execute();
}
catch (GracefulException e)
{
Reporter.Error.WriteLine(e.Message.Red());
- command.ShowHelp();
+ result.ShowHelp();
return 1;
}
catch (CommandParsingException e)
@@ -81,4 +52,4 @@ namespace Microsoft.DotNet.Cli
}
}
}
-}
+}
\ No newline at end of file
diff --git a/src/dotnet/ParseResultExtensions.cs b/src/dotnet/ParseResultExtensions.cs
index f4ae8866a..eda1a5590 100644
--- a/src/dotnet/ParseResultExtensions.cs
+++ b/src/dotnet/ParseResultExtensions.cs
@@ -14,11 +14,9 @@ namespace Microsoft.DotNet.Cli
public static void ShowHelpIfRequested(this ParseResult parseResult)
{
- if (parseResult.HasOption("help"))
+ if (parseResult.AppliedOptions.Any(o => o.HasOption("help")))
{
-
// NOTE: this is a temporary stage in refactoring toward the ClicCommandLineParser being used at the CLI entry point.
-
throw new HelpException(parseResult.Command().HelpView());
}
}
diff --git a/src/dotnet/Parser.cs b/src/dotnet/Parser.cs
index 0c208cfa5..310d08c10 100644
--- a/src/dotnet/Parser.cs
+++ b/src/dotnet/Parser.cs
@@ -12,7 +12,7 @@ namespace Microsoft.DotNet.Cli
delimiters: Array.Empty(),
options: Create.Command("dotnet",
".NET Command Line Tools",
- Accept.NoArguments,
+ Accept.NoArguments(),
NewCommandParser.New(),
RestoreCommandParser.Restore(),
BuildCommandParser.Build(),
diff --git a/src/dotnet/Program.cs b/src/dotnet/Program.cs
index b47943ce8..8cf7f58a2 100644
--- a/src/dotnet/Program.cs
+++ b/src/dotnet/Program.cs
@@ -54,7 +54,7 @@ namespace Microsoft.DotNet.Cli
["test"] = TestCommand.Run,
["vstest"] = VSTestCommand.Run,
["complete"] = CompleteCommand.Run,
- ["parse"] = ParseCommand.Run,
+ ["parse"] = ParseCommand.Run
};
public static int Main(string[] args)
diff --git a/src/dotnet/commands/dotnet-add/AddCommandParser.cs b/src/dotnet/commands/dotnet-add/AddCommandParser.cs
index 6e4a1881f..fd1ed571d 100644
--- a/src/dotnet/commands/dotnet-add/AddCommandParser.cs
+++ b/src/dotnet/commands/dotnet-add/AddCommandParser.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using System.Net.Http;
using System.Threading;
using Microsoft.DotNet.Cli.CommandLine;
@@ -13,36 +14,48 @@ namespace Microsoft.DotNet.Cli
internal static class AddCommandParser
{
public static Command Add() =>
- Create.Command("add",
- ".NET Add Command",
- Accept.ExactlyOneArgument.DefaultToCurrentDirectory(),
- Create.Command("package",
- ".NET Add Package reference Command",
- Accept.ExactlyOneArgument
- .WithSuggestionsFrom(QueryNuGet), CommonOptions.HelpOption(),
- Create.Option("-v|--version",
- "Version for the package to be added.",
- Accept.ExactlyOneArgument
- .With(name: "VERSION")),
- Create.Option("-f|--framework",
- "Add reference only when targetting a specific framework",
- Accept.ExactlyOneArgument
- .With(name: "FRAMEWORK")),
- Create.Option("-n|--no-restore ",
- "Add reference without performing restore preview and compatibility check."),
- Create.Option("-s|--source",
- "Use specific NuGet package sources to use during the restore."),
- Create.Option("--package-directory",
- "Restore the packages to this Directory .",
- Accept.ExactlyOneArgument
- .With(name: "PACKAGE_DIRECTORY"))),
- Create.Command("reference",
- "Command to add project to project reference",
- Accept.OneOrMoreArguments, CommonOptions.HelpOption(),
- Create.Option("-f|--framework",
- "Add reference only when targetting a specific framework",
- Accept.AnyOneOf(Suggest.TargetFrameworksFromProjectFile)
- .With(name: "FRAMEWORK"))), CommonOptions.HelpOption());
+ Create.Command(
+ "add",
+ ".NET Add Command",
+ Accept.ExactlyOneArgument()
+ .DefaultToCurrentDirectory(),
+ Create.Command(
+ "package",
+ ".NET Add Package reference Command",
+ Accept.ExactlyOneArgument()
+ .WithSuggestionsFrom(QueryNuGet), CommonOptions.HelpOption(),
+ Create.Option("-v|--version",
+ "Version for the package to be added.",
+ Accept.ExactlyOneArgument()
+ .With(name: "VERSION")
+ .ForwardAs(o => $"--version {o.Arguments.Single()}")),
+ Create.Option("-f|--framework",
+ "Add reference only when targetting a specific framework",
+ Accept.ExactlyOneArgument()
+ .With(name: "FRAMEWORK")
+ .ForwardAs(o => $"--framework {o.Arguments.Single()}")),
+ Create.Option("-n|--no-restore ",
+ "Add reference without performing restore preview and compatibility check."),
+ Create.Option("-s|--source",
+ "Use specific NuGet package sources to use during the restore.",
+ Accept.ExactlyOneArgument()
+ .With(name: "SOURCE")
+ .ForwardAs(o => $"--source {o.Arguments.Single()}")),
+ Create.Option("--package-directory",
+ "Restore the packages to this Directory .",
+ Accept.ExactlyOneArgument()
+ .With(name: "PACKAGE_DIRECTORY")
+ .ForwardAs(o => $"--package-directory {o.Arguments.Single()}"))),
+ Create.Command(
+ "reference",
+ "Command to add project to project reference",
+ Accept.OneOrMoreArguments(),
+ CommonOptions.HelpOption(),
+ Create.Option("-f|--framework",
+ "Add reference only when targetting a specific framework",
+ Accept.AnyOneOf(Suggest.TargetFrameworksFromProjectFile)
+ .With(name: "FRAMEWORK"))),
+ CommonOptions.HelpOption());
public static IEnumerable QueryNuGet(string match)
{
diff --git a/src/dotnet/commands/dotnet-add/Program.cs b/src/dotnet/commands/dotnet-add/Program.cs
index 09de6a9f9..25fe203ea 100644
--- a/src/dotnet/commands/dotnet-add/Program.cs
+++ b/src/dotnet/commands/dotnet-add/Program.cs
@@ -3,7 +3,9 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using Microsoft.DotNet.Cli;
+using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Tools.Add.PackageReference;
using Microsoft.DotNet.Tools.Add.ProjectToProjectReference;
@@ -16,11 +18,22 @@ namespace Microsoft.DotNet.Tools.Add
protected override string FullCommandNameLocalized => LocalizableStrings.NetAddCommand;
protected override string ArgumentName => Constants.ProjectArgumentName;
protected override string ArgumentDescriptionLocalized => CommonLocalizableStrings.ArgumentsProjectDescription;
- internal override List> SubCommands =>
- new List>
+
+ internal override Dictionary> SubCommands =>
+ new Dictionary>
{
- AddProjectToProjectReferenceCommand.Create,
- AddPackageReferenceCommand.Create,
+ {
+ "reference",
+ add => new AddProjectToProjectReferenceCommand(
+ add["reference"],
+ add.Value())
+ },
+ {
+ "package",
+ add => new AddPackageReferenceCommand(
+ add["package"],
+ add.Value())
+ }
};
public static int Run(string[] args)
@@ -29,4 +42,4 @@ namespace Microsoft.DotNet.Tools.Add
return command.RunCommand(args);
}
}
-}
+}
\ No newline at end of file
diff --git a/src/dotnet/commands/dotnet-add/dotnet-add-package/Program.cs b/src/dotnet/commands/dotnet-add/dotnet-add-package/Program.cs
index c5a1fa054..a5ccd858b 100644
--- a/src/dotnet/commands/dotnet-add/dotnet-add-package/Program.cs
+++ b/src/dotnet/commands/dotnet-add/dotnet-add-package/Program.cs
@@ -1,105 +1,65 @@
// 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.Build.Evaluation;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
using Microsoft.DotNet.Cli;
using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Utils;
-using Microsoft.DotNet.Tools.Common;
using Microsoft.DotNet.Tools.MSBuild;
using Microsoft.DotNet.Tools.NuGet;
-using NuGet.Frameworks;
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Text;
namespace Microsoft.DotNet.Tools.Add.PackageReference
{
- internal class AddPackageReferenceCommand : DotNetSubCommandBase
+ internal class AddPackageReferenceCommand : CommandBase
{
- private CommandOption _versionOption;
- private CommandOption _frameworkOption;
- private CommandOption _noRestoreOption;
- private CommandOption _sourceOption;
- private CommandOption _packageDirectoryOption;
- private CommandArgument _packageNameArgument;
+ private readonly AppliedOption _appliedCommand;
- public static DotNetSubCommandBase Create()
+ private readonly string _packageId;
+ private readonly string _fileOrDirectory;
+
+ public AddPackageReferenceCommand(AppliedOption appliedCommand, string fileOrDirectory)
{
- var command = new AddPackageReferenceCommand
- {
- Name = "package",
- FullName = LocalizableStrings.AppFullName,
- Description = LocalizableStrings.AppDescription,
- HandleRemainingArguments = false
- };
+ _appliedCommand = appliedCommand;
+ _fileOrDirectory = fileOrDirectory;
+ _packageId = appliedCommand.Value();
- command.HelpOption("-h|--help");
-
- command._packageNameArgument = command.Argument(
- $"<{LocalizableStrings.CmdPackage}>",
- LocalizableStrings.CmdPackageDescription,
- multipleValues: false);
-
- command._versionOption = command.Option(
- $"-v|--version <{LocalizableStrings.CmdVersion}>",
- description: LocalizableStrings.CmdVersionDescription,
- optionType: CommandOptionType.SingleValue);
-
- command._frameworkOption = command.Option(
- $"-f|--framework <{LocalizableStrings.CmdFramework}>",
- LocalizableStrings.CmdFrameworkDescription,
- CommandOptionType.SingleValue);
-
- command._noRestoreOption = command.Option(
- "-n|--no-restore ",
- LocalizableStrings.CmdNoRestoreDescription,
- CommandOptionType.NoValue);
-
- command._sourceOption = command.Option(
- $"-s|--source <{LocalizableStrings.CmdSource}>",
- LocalizableStrings.CmdSourceDescription,
- CommandOptionType.SingleValue);
-
- command._packageDirectoryOption = command.Option(
- $"--package-directory <{LocalizableStrings.CmdPackageDirectory}>",
- LocalizableStrings.CmdPackageDirectoryDescription,
- CommandOptionType.SingleValue);
-
- return command;
+
+ if ( string.IsNullOrWhiteSpace(_packageId) || _appliedCommand.Arguments.Count > 1)
+ {
+ throw new GracefulException(LocalizableStrings.SpecifyExactlyOnePackageReference);
+ }
}
- public override int Run(string fileOrDirectory)
+ public override int Execute()
{
- if (_packageNameArgument.Values.Count != 1 || string.IsNullOrWhiteSpace(_packageNameArgument.Value) || RemainingArguments.Count > 0)
- {
- throw new GracefulException(LocalizableStrings.SpecifyExactlyOnePackageReference);
- }
-
var projectFilePath = string.Empty;
- if (!File.Exists(fileOrDirectory))
+ if (!File.Exists(_fileOrDirectory))
{
- projectFilePath = MsbuildProject.GetProjectFileFromDirectory(fileOrDirectory).FullName;
+ projectFilePath = MsbuildProject.GetProjectFileFromDirectory(_fileOrDirectory).FullName;
}
else
{
- projectFilePath = fileOrDirectory;
+ projectFilePath = _fileOrDirectory;
}
var tempDgFilePath = string.Empty;
- if (!_noRestoreOption.HasValue())
+ if (!_appliedCommand.HasOption("no-restore"))
{
// Create a Dependency Graph file for the project
tempDgFilePath = Path.GetTempFileName();
GetProjectDependencyGraph(projectFilePath, tempDgFilePath);
}
- var result = NuGetCommand.Run(TransformArgs(_packageNameArgument.Value, tempDgFilePath, projectFilePath));
+ var result = NuGetCommand.Run(
+ TransformArgs(
+ _packageId,
+ tempDgFilePath,
+ projectFilePath));
DisposeTemporaryFile(tempDgFilePath);
return result;
@@ -136,7 +96,8 @@ namespace Microsoft.DotNet.Tools.Add.PackageReference
private string[] TransformArgs(string packageId, string tempDgFilePath, string projectFilePath)
{
- var args = new List(){
+ var args = new List
+ {
"package",
"add",
"--package",
@@ -145,27 +106,11 @@ namespace Microsoft.DotNet.Tools.Add.PackageReference
projectFilePath
};
- if (_versionOption.HasValue())
- {
- args.Add("--version");
- args.Add(_versionOption.Value());
- }
- if (_sourceOption.HasValue())
- {
- args.Add("--source");
- args.Add(_sourceOption.Value());
- }
- if (_frameworkOption.HasValue())
- {
- args.Add("--framework");
- args.Add(_frameworkOption.Value());
- }
- if (_packageDirectoryOption.HasValue())
- {
- args.Add("--package-directory");
- args.Add(_packageDirectoryOption.Value());
- }
- if (_noRestoreOption.HasValue())
+ args.AddRange(_appliedCommand
+ .OptionValuesToBeForwarded()
+ .SelectMany(a => a.Split(' ')));
+
+ if (_appliedCommand.HasOption("no-restore"))
{
args.Add("--no-restore");
}
@@ -178,4 +123,4 @@ namespace Microsoft.DotNet.Tools.Add.PackageReference
return args.ToArray();
}
}
-}
+}
\ No newline at end of file
diff --git a/src/dotnet/commands/dotnet-add/dotnet-add-reference/Program.cs b/src/dotnet/commands/dotnet-add/dotnet-add-reference/Program.cs
index aef1d216d..a1159ed23 100644
--- a/src/dotnet/commands/dotnet-add/dotnet-add-reference/Program.cs
+++ b/src/dotnet/commands/dotnet-add/dotnet-add-reference/Program.cs
@@ -1,59 +1,46 @@
// 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;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
using Microsoft.Build.Evaluation;
using Microsoft.DotNet.Cli;
using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Tools.Common;
using NuGet.Frameworks;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
namespace Microsoft.DotNet.Tools.Add.ProjectToProjectReference
{
- internal class AddProjectToProjectReferenceCommand : DotNetSubCommandBase
+ internal class AddProjectToProjectReferenceCommand : CommandBase
{
- private CommandOption _frameworkOption;
+ private readonly AppliedOption _appliedCommand;
+ private readonly string _fileOrDirectory;
- public static DotNetSubCommandBase Create()
+ public AddProjectToProjectReferenceCommand(AppliedOption appliedCommand, string fileOrDirectory)
{
- var command = new AddProjectToProjectReferenceCommand()
+ if (appliedCommand == null)
{
- Name = "reference",
- FullName = LocalizableStrings.AppFullName,
- Description = LocalizableStrings.AppDescription,
- HandleRemainingArguments = true,
- ArgumentSeparatorHelpText = LocalizableStrings.AppHelpText,
- };
-
- command.HelpOption("-h|--help");
-
- command._frameworkOption = command.Option(
- $"-f|--framework <{CommonLocalizableStrings.CmdFramework}>",
- LocalizableStrings.CmdFrameworkDescription,
- CommandOptionType.SingleValue);
-
- return command;
+ throw new ArgumentNullException(nameof(appliedCommand));
+ }
+ _appliedCommand = appliedCommand;
+ _fileOrDirectory = fileOrDirectory;
}
- public override int Run(string fileOrDirectory)
+ public override int Execute()
{
var projects = new ProjectCollection();
- MsbuildProject msbuildProj = MsbuildProject.FromFileOrDirectory(projects, fileOrDirectory);
+ MsbuildProject msbuildProj = MsbuildProject.FromFileOrDirectory(projects, _fileOrDirectory);
- if (RemainingArguments.Count == 0)
- {
- throw new GracefulException(CommonLocalizableStrings.SpecifyAtLeastOneReferenceToAdd);
- }
+ var frameworkString = _appliedCommand["framework"].Value();
- string frameworkString = _frameworkOption.Value();
- PathUtility.EnsureAllPathsExist(RemainingArguments, CommonLocalizableStrings.ReferenceDoesNotExist);
- List refs = RemainingArguments
- .Select((r) => MsbuildProject.FromFile(projects, r))
- .ToList();
+ PathUtility.EnsureAllPathsExist(_appliedCommand.Arguments, CommonLocalizableStrings.ReferenceDoesNotExist);
+ List refs = _appliedCommand.Arguments
+ .Select((r) => MsbuildProject.FromFile(projects, r))
+ .ToList();
if (frameworkString == null)
{
@@ -64,8 +51,8 @@ namespace Microsoft.DotNet.Tools.Add.ProjectToProjectReference
if (!@ref.CanWorkOnFramework(tfm))
{
Reporter.Error.Write(GetProjectNotCompatibleWithFrameworksDisplayString(
- @ref,
- msbuildProj.GetTargetFrameworks().Select((fx) => fx.GetShortFolderName())));
+ @ref,
+ msbuildProj.GetTargetFrameworks().Select((fx) => fx.GetShortFolderName())));
return 1;
}
}
@@ -77,9 +64,9 @@ namespace Microsoft.DotNet.Tools.Add.ProjectToProjectReference
if (!msbuildProj.IsTargetingFramework(framework))
{
Reporter.Error.WriteLine(string.Format(
- CommonLocalizableStrings.ProjectDoesNotTargetFramework,
- msbuildProj.ProjectRootElement.FullPath,
- frameworkString));
+ CommonLocalizableStrings.ProjectDoesNotTargetFramework,
+ msbuildProj.ProjectRootElement.FullPath,
+ frameworkString));
return 1;
}
@@ -88,18 +75,19 @@ namespace Microsoft.DotNet.Tools.Add.ProjectToProjectReference
if (!@ref.CanWorkOnFramework(framework))
{
Reporter.Error.Write(GetProjectNotCompatibleWithFrameworksDisplayString(
- @ref,
- new string[] { frameworkString }));
+ @ref,
+ new string[] { frameworkString }));
return 1;
}
}
}
- var relativePathReferences = RemainingArguments.Select((r) =>
- PathUtility.GetRelativePath(msbuildProj.ProjectDirectory, Path.GetFullPath(r))).ToList();
+ var relativePathReferences = _appliedCommand.Arguments.Select((r) =>
+ PathUtility.GetRelativePath(msbuildProj.ProjectDirectory, Path.GetFullPath(r)))
+ .ToList();
int numberOfAddedReferences = msbuildProj.AddProjectToProjectReferences(
- _frameworkOption.Value(),
+ frameworkString,
relativePathReferences);
if (numberOfAddedReferences != 0)
@@ -122,4 +110,4 @@ namespace Microsoft.DotNet.Tools.Add.ProjectToProjectReference
return sb.ToString();
}
}
-}
+}
\ No newline at end of file
diff --git a/src/dotnet/commands/dotnet-build/BuildCommandParser.cs b/src/dotnet/commands/dotnet-build/BuildCommandParser.cs
index 2b072c9bc..c8c402c4f 100644
--- a/src/dotnet/commands/dotnet-build/BuildCommandParser.cs
+++ b/src/dotnet/commands/dotnet-build/BuildCommandParser.cs
@@ -13,12 +13,11 @@ namespace Microsoft.DotNet.Cli
Create.Command(
"build",
LocalizableStrings.AppFullName,
- Accept.ZeroOrMoreArguments,
CommonOptions.HelpOption(),
Create.Option(
"-o|--output",
LocalizableStrings.OutputOptionDescription,
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: LocalizableStrings.OutputOptionName)
.ForwardAs(o => $"/p:OutputPath={o.Arguments.Single()}")),
CommonOptions.FrameworkOption(),
@@ -31,7 +30,7 @@ namespace Microsoft.DotNet.Cli
Create.Option(
"--no-dependencies",
LocalizableStrings.NoDependenciesOptionDescription,
- Accept.NoArguments
+ Accept.NoArguments()
.ForwardAs("/p:BuildProjectReferences=false")),
CommonOptions.VerbosityOption());
}
diff --git a/src/dotnet/commands/dotnet-clean/CleanCommandParser.cs b/src/dotnet/commands/dotnet-clean/CleanCommandParser.cs
index fdbf7d9df..50db53d60 100644
--- a/src/dotnet/commands/dotnet-clean/CleanCommandParser.cs
+++ b/src/dotnet/commands/dotnet-clean/CleanCommandParser.cs
@@ -17,7 +17,7 @@ namespace Microsoft.DotNet.Cli
CommonOptions.HelpOption(),
Create.Option("-o|--output",
LocalizableStrings.CmdOutputDirDescription,
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: LocalizableStrings.CmdOutputDir)
.ForwardAs(o => $"/p:OutputPath={o.Arguments.Single()}")),
CommonOptions.FrameworkOption(),
diff --git a/src/dotnet/commands/dotnet-complete/CompleteCommandParser.cs b/src/dotnet/commands/dotnet-complete/CompleteCommandParser.cs
index e79951fcb..658a5e22c 100644
--- a/src/dotnet/commands/dotnet-complete/CompleteCommandParser.cs
+++ b/src/dotnet/commands/dotnet-complete/CompleteCommandParser.cs
@@ -11,10 +11,11 @@ namespace Microsoft.DotNet.Cli
public static Command Complete() =>
Create.Command(
"complete", "",
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: "path"),
Create.Option("--position", "",
- Accept.ExactlyOneArgument
- .With(name: "command")));
+ Accept.ExactlyOneArgument()
+ .With(name: "command")
+ .MaterializeAs(o => int.Parse(o.Arguments.Single()))));
}
}
\ No newline at end of file
diff --git a/src/dotnet/commands/dotnet-list/ListCommandParser.cs b/src/dotnet/commands/dotnet-list/ListCommandParser.cs
index ddfde2b6f..d90660bc5 100644
--- a/src/dotnet/commands/dotnet-list/ListCommandParser.cs
+++ b/src/dotnet/commands/dotnet-list/ListCommandParser.cs
@@ -10,14 +10,14 @@ namespace Microsoft.DotNet.Cli
public static Command List() =>
Create.Command("list",
".NET List Command",
- Accept.ZeroOrOneArgument
+ Accept.ZeroOrOneArgument()
.With(name: "PROJECT",
description:
"The project file to operate on. If a file is not specified, the command will search the current directory for one.")
.DefaultToCurrentDirectory(),
CommonOptions.HelpOption(),
Create.Command("reference", "Command to list project to project references",
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: "PROJECT",
description:
"The project file to operate on. If a file is not specified, the command will search the current directory for one."),
diff --git a/src/dotnet/commands/dotnet-list/Program.cs b/src/dotnet/commands/dotnet-list/Program.cs
index 62cdc3bac..016cfebe9 100644
--- a/src/dotnet/commands/dotnet-list/Program.cs
+++ b/src/dotnet/commands/dotnet-list/Program.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Microsoft.DotNet.Cli;
+using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Tools.List.ProjectToProjectReferences;
@@ -15,10 +16,11 @@ namespace Microsoft.DotNet.Tools.List
protected override string FullCommandNameLocalized => LocalizableStrings.NetListCommand;
protected override string ArgumentName => Constants.ProjectArgumentName;
protected override string ArgumentDescriptionLocalized => CommonLocalizableStrings.ArgumentsProjectDescription;
- internal override List> SubCommands =>
- new List>
+
+ internal override Dictionary> SubCommands =>
+ new Dictionary>
{
- ListProjectToProjectReferencesCommand.Create,
+ { "list", o => new ListProjectToProjectReferencesCommand(o) }
};
public static int Run(string[] args)
@@ -27,4 +29,4 @@ namespace Microsoft.DotNet.Tools.List
return command.RunCommand(args);
}
}
-}
+}
\ No newline at end of file
diff --git a/src/dotnet/commands/dotnet-list/dotnet-list-reference/Program.cs b/src/dotnet/commands/dotnet-list/dotnet-list-reference/Program.cs
index 28a3f29ff..fe33c9a0f 100644
--- a/src/dotnet/commands/dotnet-list/dotnet-list-reference/Program.cs
+++ b/src/dotnet/commands/dotnet-list/dotnet-list-reference/Program.cs
@@ -1,40 +1,40 @@
// 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;
+using System.Linq;
using Microsoft.Build.Evaluation;
using Microsoft.DotNet.Cli;
+using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Utils;
-using System.Linq;
namespace Microsoft.DotNet.Tools.List.ProjectToProjectReferences
{
- internal class ListProjectToProjectReferencesCommand : DotNetSubCommandBase
+ internal class ListProjectToProjectReferencesCommand : CommandBase
{
- public static DotNetSubCommandBase Create()
+ private readonly string _fileOrDirectory;
+
+ public ListProjectToProjectReferencesCommand(AppliedOption appliedCommand)
{
- var command = new ListProjectToProjectReferencesCommand()
+ if (appliedCommand == null)
{
- Name = "reference",
- FullName = LocalizableStrings.AppFullName,
- Description = LocalizableStrings.AppDescription,
- };
+ throw new ArgumentNullException(nameof(appliedCommand));
+ }
- command.HelpOption("-h|--help");
-
- return command;
+ _fileOrDirectory = appliedCommand.Arguments.Single();
}
- public override int Run(string fileOrDirectory)
+ public override int Execute()
{
- var msbuildProj = MsbuildProject.FromFileOrDirectory(new ProjectCollection(), fileOrDirectory);
+ var msbuildProj = MsbuildProject.FromFileOrDirectory(new ProjectCollection(), _fileOrDirectory);
var p2ps = msbuildProj.GetProjectToProjectReferences();
if (!p2ps.Any())
{
Reporter.Output.WriteLine(string.Format(
- CommonLocalizableStrings.NoReferencesFound,
- CommonLocalizableStrings.P2P,
- fileOrDirectory));
+ CommonLocalizableStrings.NoReferencesFound,
+ CommonLocalizableStrings.P2P,
+ _fileOrDirectory));
return 0;
}
@@ -48,4 +48,4 @@ namespace Microsoft.DotNet.Tools.List.ProjectToProjectReferences
return 0;
}
}
-}
+}
\ No newline at end of file
diff --git a/src/dotnet/commands/dotnet-new/NewCommandParser.cs b/src/dotnet/commands/dotnet-new/NewCommandParser.cs
index 36f49c8b9..88d81208a 100644
--- a/src/dotnet/commands/dotnet-new/NewCommandParser.cs
+++ b/src/dotnet/commands/dotnet-new/NewCommandParser.cs
@@ -11,7 +11,7 @@ namespace Microsoft.DotNet.Cli
Create.Command("new",
"Initialize .NET projects.",
Accept
- .ExactlyOneArgument
+ .ExactlyOneArgument()
.WithSuggestionsFrom(
"console",
"classlib",
diff --git a/src/dotnet/commands/dotnet-nuget/NuGetCommandParser.cs b/src/dotnet/commands/dotnet-nuget/NuGetCommandParser.cs
index 2358c685e..fd80e5589 100644
--- a/src/dotnet/commands/dotnet-nuget/NuGetCommandParser.cs
+++ b/src/dotnet/commands/dotnet-nuget/NuGetCommandParser.cs
@@ -15,11 +15,11 @@ namespace Microsoft.DotNet.Cli
"Show version information"),
Create.Option("-v|--verbosity",
"The verbosity of logging to use. Allowed values: Debug, Verbose, Information, Minimal, Warning, Error.",
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: "verbosity")),
Create.Command("delete",
"Deletes a package from the server.",
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: "root",
description: "The Package Id and version."),
CommonOptions.HelpOption(),
@@ -27,13 +27,13 @@ namespace Microsoft.DotNet.Cli
"Forces the application to run using an invariant, English-based culture."),
Create.Option("-s|--source",
"Specifies the server URL",
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: "source")),
Create.Option("--non-interactive",
"Do not prompt for user input or confirmations."),
Create.Option("-k|--api-key",
"The API key for the server.",
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: "apiKey"))),
Create.Command("locals",
"Clears or lists local NuGet resources such as http requests cache, packages cache or machine-wide global packages folder.",
@@ -54,21 +54,21 @@ namespace Microsoft.DotNet.Cli
"Forces the application to run using an invariant, English-based culture."),
Create.Option("-s|--source",
"Specifies the server URL",
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: "source")),
Create.Option("-ss|--symbol-source",
"Specifies the symbol server URL. If not specified, nuget.smbsrc.net is used when pushing to nuget.org.",
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: "source")),
Create.Option("-t|--timeout",
"Specifies the timeout for pushing to a server in seconds. Defaults to 300 seconds (5 minutes).",
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: "timeout")),
Create.Option("-k|--api-key", "The API key for the server.",
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: "apiKey")),
Create.Option("-sk|--symbol-api-key", "The API key for the symbol server.",
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: "apiKey")),
Create.Option("-d|--disable-buffering",
"Disable buffering when pushing to an HTTP(S) server to decrease memory usage."),
diff --git a/src/dotnet/commands/dotnet-pack/PackCommandParser.cs b/src/dotnet/commands/dotnet-pack/PackCommandParser.cs
index ec210cb24..75b52a7ab 100644
--- a/src/dotnet/commands/dotnet-pack/PackCommandParser.cs
+++ b/src/dotnet/commands/dotnet-pack/PackCommandParser.cs
@@ -18,7 +18,7 @@ namespace Microsoft.DotNet.Cli
Create.Option(
"-o|--output",
LocalizableStrings.CmdOutputDirDescription,
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: LocalizableStrings.CmdOutputDir)
.ForwardAs(o => $"/p:PackageOutputPath={o.Arguments.Single()}")),
Create.Option("--no-build",
diff --git a/src/dotnet/commands/dotnet-publish/PublishCommandParser.cs b/src/dotnet/commands/dotnet-publish/PublishCommandParser.cs
index ae44f327e..e62a36de6 100644
--- a/src/dotnet/commands/dotnet-publish/PublishCommandParser.cs
+++ b/src/dotnet/commands/dotnet-publish/PublishCommandParser.cs
@@ -13,22 +13,20 @@ namespace Microsoft.DotNet.Cli
Create.Command(
"publish",
LocalizableStrings.AppFullName,
- Accept.ZeroOrMoreArguments,
+ Accept.ZeroOrMoreArguments(),
CommonOptions.HelpOption(),
CommonOptions.FrameworkOption(),
CommonOptions.RuntimeOption(),
Create.Option(
"-o|--output",
LocalizableStrings.OutputOptionDescription,
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: LocalizableStrings.OutputOption)
.ForwardAs(o => $"/p:PublishDir={o.Arguments.Single()}")),
CommonOptions.ConfigurationOption(),
- CommonOptions.VersionSuffixOption(),
- Create.Option(
"--filter",
LocalizableStrings.FilterProjOptionDescription,
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: LocalizableStrings.FilterProjOption)
.ForwardAs(o => $"/p:FilterProjectFiles={o.Arguments.Single()}")),
CommonOptions.VerbosityOption());
diff --git a/src/dotnet/commands/dotnet-remove/Program.cs b/src/dotnet/commands/dotnet-remove/Program.cs
index 26555a63b..c30791bf5 100644
--- a/src/dotnet/commands/dotnet-remove/Program.cs
+++ b/src/dotnet/commands/dotnet-remove/Program.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Microsoft.DotNet.Cli;
+using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Tools.Remove.PackageReference;
using Microsoft.DotNet.Tools.Remove.ProjectToProjectReference;
@@ -16,11 +17,12 @@ namespace Microsoft.DotNet.Tools.Remove
protected override string FullCommandNameLocalized => LocalizableStrings.NetRemoveCommand;
protected override string ArgumentName => Constants.ProjectArgumentName;
protected override string ArgumentDescriptionLocalized => CommonLocalizableStrings.ArgumentsProjectDescription;
- internal override List> SubCommands =>
- new List>
+
+ internal override Dictionary> SubCommands =>
+ new Dictionary>
{
- RemoveProjectToProjectReferenceCommand.Create,
- RemovePackageReferenceCommand.Create
+ { "reference", o => new RemoveProjectToProjectReferenceCommand(o) },
+ { "package", o => new RemovePackageReferenceCommand(o) }
};
public static int Run(string[] args)
@@ -29,4 +31,4 @@ namespace Microsoft.DotNet.Tools.Remove
return command.RunCommand(args);
}
}
-}
+}
\ No newline at end of file
diff --git a/src/dotnet/commands/dotnet-remove/RemoveCommandParser.cs b/src/dotnet/commands/dotnet-remove/RemoveCommandParser.cs
index 0e99c019b..b452057b8 100644
--- a/src/dotnet/commands/dotnet-remove/RemoveCommandParser.cs
+++ b/src/dotnet/commands/dotnet-remove/RemoveCommandParser.cs
@@ -10,7 +10,7 @@ namespace Microsoft.DotNet.Cli
public static Command Remove() =>
Create.Command("remove",
".NET Remove Command",
- Accept.ZeroOrOneArgument
+ Accept.ZeroOrOneArgument()
.With(name: "PROJECT")
.DefaultToCurrentDirectory(),
CommonOptions.HelpOption(),
@@ -23,7 +23,7 @@ namespace Microsoft.DotNet.Cli
CommonOptions.HelpOption(),
Create.Option("-f|--framework",
"Remove reference only when targetting a specific framework",
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: "FRAMEWORK"))));
}
}
\ No newline at end of file
diff --git a/src/dotnet/commands/dotnet-remove/dotnet-remove-package/Program.cs b/src/dotnet/commands/dotnet-remove/dotnet-remove-package/Program.cs
index 85af67e76..082b97ff6 100644
--- a/src/dotnet/commands/dotnet-remove/dotnet-remove-package/Program.cs
+++ b/src/dotnet/commands/dotnet-remove/dotnet-remove-package/Program.cs
@@ -1,61 +1,50 @@
// 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.Build.Evaluation;
+using System;
+using System.IO;
+using System.Linq;
using Microsoft.DotNet.Cli;
using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Utils;
-using Microsoft.DotNet.Tools.Common;
-using Microsoft.DotNet.Tools.MSBuild;
using Microsoft.DotNet.Tools.NuGet;
-using NuGet.Frameworks;
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Text;
namespace Microsoft.DotNet.Tools.Remove.PackageReference
{
- internal class RemovePackageReferenceCommand : DotNetSubCommandBase
+ internal class RemovePackageReferenceCommand : CommandBase
{
+ private readonly AppliedOption _appliedCommand;
+ private readonly string _fileOrDirectory;
- public static DotNetSubCommandBase Create()
+ public RemovePackageReferenceCommand(AppliedOption appliedCommand)
{
- var command = new RemovePackageReferenceCommand
+ if (appliedCommand == null)
{
- Name = "package",
- FullName = LocalizableStrings.AppFullName,
- Description = LocalizableStrings.AppDescription,
- HandleRemainingArguments = true,
- ArgumentSeparatorHelpText = LocalizableStrings.AppHelpText,
- };
-
- command.HelpOption("-h|--help");
-
- return command;
- }
-
- public override int Run(string fileOrDirectory)
- {
- if (RemainingArguments.Count != 1)
+ throw new ArgumentNullException(nameof(appliedCommand));
+ }
+ if (_appliedCommand.Arguments.Count != 1)
{
throw new GracefulException(LocalizableStrings.SpecifyExactlyOnePackageReference);
}
+ _appliedCommand = appliedCommand;
+ _fileOrDirectory = appliedCommand.Arguments.Single();
+ }
+
+ public override int Execute()
+ {
var projectFilePath = string.Empty;
- if (!File.Exists(fileOrDirectory))
+ if (!File.Exists(_fileOrDirectory))
{
- projectFilePath = MsbuildProject.GetProjectFileFromDirectory(fileOrDirectory).FullName;
+ projectFilePath = MsbuildProject.GetProjectFileFromDirectory(_fileOrDirectory).FullName;
}
else
{
- projectFilePath = fileOrDirectory;
+ projectFilePath = _fileOrDirectory;
}
- var packageToRemove = RemainingArguments.First();
+ var packageToRemove = _appliedCommand.Arguments.Single();
var result = NuGetCommand.Run(TransformArgs(packageToRemove, projectFilePath));
return result;
@@ -63,7 +52,8 @@ namespace Microsoft.DotNet.Tools.Remove.PackageReference
private string[] TransformArgs(string packageId, string projectFilePath)
{
- return new string[]{
+ return new string[]
+ {
"package",
"remove",
"--package",
@@ -73,4 +63,4 @@ namespace Microsoft.DotNet.Tools.Remove.PackageReference
};
}
}
-}
+}
\ No newline at end of file
diff --git a/src/dotnet/commands/dotnet-remove/dotnet-remove-reference/Program.cs b/src/dotnet/commands/dotnet-remove/dotnet-remove-reference/Program.cs
index 04d4069f4..55c6b3e2c 100644
--- a/src/dotnet/commands/dotnet-remove/dotnet-remove-reference/Program.cs
+++ b/src/dotnet/commands/dotnet-remove/dotnet-remove-reference/Program.cs
@@ -1,6 +1,8 @@
// 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;
+using System.Linq;
using Microsoft.Build.Evaluation;
using Microsoft.DotNet.Cli;
using Microsoft.DotNet.Cli.CommandLine;
@@ -8,42 +10,34 @@ using Microsoft.DotNet.Cli.Utils;
namespace Microsoft.DotNet.Tools.Remove.ProjectToProjectReference
{
- internal class RemoveProjectToProjectReferenceCommand : DotNetSubCommandBase
+ internal class RemoveProjectToProjectReferenceCommand : CommandBase
{
- private CommandOption _frameworkOption;
+ private readonly AppliedOption _appliedCommand;
+ private readonly string _fileOrDirectory;
- public static DotNetSubCommandBase Create()
+ public RemoveProjectToProjectReferenceCommand(AppliedOption appliedCommand)
{
- var command = new RemoveProjectToProjectReferenceCommand()
+ if (appliedCommand == null)
{
- Name = "reference",
- FullName = LocalizableStrings.AppFullName,
- Description = LocalizableStrings.AppDescription,
- HandleRemainingArguments = true,
- ArgumentSeparatorHelpText = LocalizableStrings.AppHelpText,
- };
+ throw new ArgumentNullException(nameof(appliedCommand));
+ }
- command.HelpOption("-h|--help");
-
- command._frameworkOption = command.Option(
- $"-f|--framework <{CommonLocalizableStrings.CmdFramework}>",
- LocalizableStrings.CmdFrameworkDescription,
- CommandOptionType.SingleValue);
-
- return command;
- }
-
- public override int Run(string fileOrDirectory)
- {
- var msbuildProj = MsbuildProject.FromFileOrDirectory(new ProjectCollection(), fileOrDirectory);
- if (RemainingArguments.Count == 0)
+ if (_appliedCommand.Arguments.Count == 0)
{
throw new GracefulException(CommonLocalizableStrings.SpecifyAtLeastOneReferenceToRemove);
}
+ _appliedCommand = appliedCommand;
+ _fileOrDirectory = appliedCommand.Arguments.Single();
+ }
+
+ public override int Execute()
+ {
+ var msbuildProj = MsbuildProject.FromFileOrDirectory(new ProjectCollection(), _fileOrDirectory);
+
int numberOfRemovedReferences = msbuildProj.RemoveProjectToProjectReferences(
- _frameworkOption.Value(),
- RemainingArguments);
+ _appliedCommand["framework"].Value(),
+ _appliedCommand.Arguments);
if (numberOfRemovedReferences != 0)
{
@@ -53,4 +47,4 @@ namespace Microsoft.DotNet.Tools.Remove.ProjectToProjectReference
return 0;
}
}
-}
+}
\ No newline at end of file
diff --git a/src/dotnet/commands/dotnet-restore/RestoreCommandParser.cs b/src/dotnet/commands/dotnet-restore/RestoreCommandParser.cs
index 130ac0aaf..34a98764c 100644
--- a/src/dotnet/commands/dotnet-restore/RestoreCommandParser.cs
+++ b/src/dotnet/commands/dotnet-restore/RestoreCommandParser.cs
@@ -13,52 +13,52 @@ namespace Microsoft.DotNet.Cli
Create.Command(
"restore",
LocalizableStrings.AppFullName,
- Accept.ZeroOrMoreArguments,
+ Accept.ZeroOrMoreArguments(),
CommonOptions.HelpOption(),
Create.Option(
"-s|--source",
LocalizableStrings.CmdSourceOptionDescription,
- Accept.OneOrMoreArguments
+ Accept.OneOrMoreArguments()
.With(name: LocalizableStrings.CmdSourceOption)
.ForwardAs(o => $"/p:RestoreSources={string.Join("%3B", o.Arguments)}")),
Create.Option(
"-r|--runtime",
LocalizableStrings.CmdRuntimeOptionDescription,
- Accept.OneOrMoreArguments
+ Accept.OneOrMoreArguments()
.WithSuggestionsFrom(_ => Suggest.RunTimesFromProjectFile())
.With(name: LocalizableStrings.CmdRuntimeOption)
.ForwardAs(o => $"/p:RuntimeIdentifiers={string.Join("%3B", o.Arguments)}")),
Create.Option(
"--packages",
LocalizableStrings.CmdPackagesOptionDescription,
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: LocalizableStrings.CmdPackagesOption)
.ForwardAs(o => $"/p:RestorePackagesPath={o.Arguments.Single()}")),
Create.Option(
"--disable-parallel",
LocalizableStrings.CmdDisableParallelOptionDescription,
- Accept.NoArguments
+ Accept.NoArguments()
.ForwardAs("/p:RestoreDisableParallel=true")),
Create.Option(
"--configfile",
LocalizableStrings.CmdConfigFileOptionDescription,
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: LocalizableStrings.CmdConfigFileOption)
.ForwardAs(o => $"/p:RestoreConfigFile={o.Arguments.Single()}")),
Create.Option(
"--no-cache",
LocalizableStrings.CmdNoCacheOptionDescription,
- Accept.NoArguments
+ Accept.NoArguments()
.ForwardAs("/p:RestoreNoCache=true")),
Create.Option(
"--ignore-failed-sources",
LocalizableStrings.CmdIgnoreFailedSourcesOptionDescription,
- Accept.NoArguments
+ Accept.NoArguments()
.ForwardAs("/p:RestoreIgnoreFailedSources=true")),
Create.Option(
"--no-dependencies",
LocalizableStrings.CmdNoDependenciesOptionDescription,
- Accept.NoArguments
+ Accept.NoArguments()
.ForwardAs("/p:RestoreRecursive=false")),
CommonOptions.VerbosityOption());
}
diff --git a/src/dotnet/commands/dotnet-run/RunCommandParser.cs b/src/dotnet/commands/dotnet-run/RunCommandParser.cs
index fdb848468..d42f58ba6 100644
--- a/src/dotnet/commands/dotnet-run/RunCommandParser.cs
+++ b/src/dotnet/commands/dotnet-run/RunCommandParser.cs
@@ -14,7 +14,7 @@ namespace Microsoft.DotNet.Cli
Create.Command(
"run",
LocalizableStrings.AppFullName,
- Accept.ZeroOrMoreArguments
+ Accept.ZeroOrMoreArguments()
.MaterializeAs(o =>
{
return new RunCommand()
@@ -31,6 +31,6 @@ namespace Microsoft.DotNet.Cli
Create.Option(
"-p|--project",
LocalizableStrings.CommandOptionProjectDescription,
- Accept.ExactlyOneArgument));
+ Accept.ExactlyOneArgument()));
}
}
\ No newline at end of file
diff --git a/src/dotnet/commands/dotnet-sln/Program.cs b/src/dotnet/commands/dotnet-sln/Program.cs
index 11e1abe65..484f20aec 100644
--- a/src/dotnet/commands/dotnet-sln/Program.cs
+++ b/src/dotnet/commands/dotnet-sln/Program.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Microsoft.DotNet.Cli;
+using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Tools.Sln.Add;
using Microsoft.DotNet.Tools.Sln.List;
@@ -17,12 +18,13 @@ namespace Microsoft.DotNet.Tools.Sln
protected override string FullCommandNameLocalized => LocalizableStrings.AppFullName;
protected override string ArgumentName => Constants.SolutionArgumentName;
protected override string ArgumentDescriptionLocalized => CommonLocalizableStrings.ArgumentsSolutionDescription;
- internal override List> SubCommands =>
- new List>
+
+ internal override Dictionary> SubCommands =>
+ new Dictionary>
{
- AddProjectToSolutionCommand.Create,
- ListProjectsInSolutionCommand.Create,
- RemoveProjectFromSolutionCommand.Create
+ { "add", o => new AddProjectToSolutionCommand(o) },
+ { "list", o => new ListProjectsInSolutionCommand(o) },
+ { "remove", o => new RemoveProjectFromSolutionCommand(o) }
};
public static int Run(string[] args)
@@ -31,4 +33,4 @@ namespace Microsoft.DotNet.Tools.Sln
return command.RunCommand(args);
}
}
-}
+}
\ No newline at end of file
diff --git a/src/dotnet/commands/dotnet-sln/SlnCommandParser.cs b/src/dotnet/commands/dotnet-sln/SlnCommandParser.cs
index 9d9f073e4..18b244ddf 100644
--- a/src/dotnet/commands/dotnet-sln/SlnCommandParser.cs
+++ b/src/dotnet/commands/dotnet-sln/SlnCommandParser.cs
@@ -13,12 +13,12 @@ namespace Microsoft.DotNet.Cli
CommonOptions.HelpOption(),
Create.Command("add",
".NET Add project(s) to a solution file Command",
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: "SLN_FILE"),
CommonOptions.HelpOption()),
Create.Command("list",
"List all projects in the solution.",
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: "SLN_FILE"),
CommonOptions.HelpOption()),
Create.Command("remove",
diff --git a/src/dotnet/commands/dotnet-sln/add/Program.cs b/src/dotnet/commands/dotnet-sln/add/Program.cs
index 6b6124a29..c5d23ff84 100644
--- a/src/dotnet/commands/dotnet-sln/add/Program.cs
+++ b/src/dotnet/commands/dotnet-sln/add/Program.cs
@@ -1,49 +1,50 @@
// 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;
+using System.IO;
+using System.Linq;
using Microsoft.DotNet.Cli;
+using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Sln.Internal;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Tools.Common;
-using Microsoft.DotNet.Tools.Sln;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
namespace Microsoft.DotNet.Tools.Sln.Add
{
- internal class AddProjectToSolutionCommand : DotNetSubCommandBase
+ internal class AddProjectToSolutionCommand : CommandBase
{
- public static DotNetSubCommandBase Create()
+ private readonly AppliedOption _appliedCommand;
+ private readonly string _fileOrDirectory;
+
+ public AddProjectToSolutionCommand(AppliedOption appliedCommand)
{
- var command = new AddProjectToSolutionCommand()
+ if (appliedCommand == null)
{
- Name = "add",
- FullName = LocalizableStrings.AddAppFullName,
- Description = LocalizableStrings.AddSubcommandHelpText,
- HandleRemainingArguments = true,
- ArgumentSeparatorHelpText = LocalizableStrings.AddSubcommandHelpText,
- };
+ throw new ArgumentNullException(nameof(appliedCommand));
+ }
+ _appliedCommand = appliedCommand;
- command.HelpOption("-h|--help");
-
- return command;
+ _fileOrDirectory = appliedCommand.Arguments.Single();
}
- public override int Run(string fileOrDirectory)
+ public override int Execute()
{
- SlnFile slnFile = SlnFileFactory.CreateFromFileOrDirectory(fileOrDirectory);
+ SlnFile slnFile = SlnFileFactory.CreateFromFileOrDirectory(_fileOrDirectory);
- if (RemainingArguments.Count == 0)
+ if (_appliedCommand.Arguments.Count == 0)
{
throw new GracefulException(CommonLocalizableStrings.SpecifyAtLeastOneProjectToAdd);
}
- PathUtility.EnsureAllPathsExist(RemainingArguments, CommonLocalizableStrings.ProjectDoesNotExist);
- var fullProjectPaths = RemainingArguments.Select((p) => Path.GetFullPath(p)).ToList();
+ PathUtility.EnsureAllPathsExist(_appliedCommand.Arguments, CommonLocalizableStrings.ProjectDoesNotExist);
+
+ var fullProjectPaths = _appliedCommand.Arguments
+ .Select(Path.GetFullPath)
+ .ToList();
+
+ var preAddProjectCount = slnFile.Projects.Count;
- int preAddProjectCount = slnFile.Projects.Count;
foreach (var fullProjectPath in fullProjectPaths)
{
slnFile.AddProject(fullProjectPath);
@@ -57,4 +58,4 @@ namespace Microsoft.DotNet.Tools.Sln.Add
return 0;
}
}
-}
+}
\ No newline at end of file
diff --git a/src/dotnet/commands/dotnet-sln/list/Program.cs b/src/dotnet/commands/dotnet-sln/list/Program.cs
index 3ff1f8480..a82bc2f87 100644
--- a/src/dotnet/commands/dotnet-sln/list/Program.cs
+++ b/src/dotnet/commands/dotnet-sln/list/Program.cs
@@ -1,33 +1,32 @@
// 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;
+using System.Linq;
using Microsoft.DotNet.Cli;
+using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Sln.Internal;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Tools.Common;
-using Microsoft.DotNet.Tools.Sln;
namespace Microsoft.DotNet.Tools.Sln.List
{
- internal class ListProjectsInSolutionCommand : DotNetSubCommandBase
+ internal class ListProjectsInSolutionCommand : CommandBase
{
- public static DotNetSubCommandBase Create()
+ private readonly string _fileOrDirectory;
+
+ public ListProjectsInSolutionCommand(AppliedOption appliedCommand)
{
- var command = new ListProjectsInSolutionCommand()
+ if (appliedCommand == null)
{
- Name = "list",
- FullName = LocalizableStrings.ListAppFullName,
- Description = LocalizableStrings.ListSubcommandHelpText,
- };
-
- command.HelpOption("-h|--help");
-
- return command;
+ throw new ArgumentNullException(nameof(appliedCommand));
+ }
+ _fileOrDirectory = appliedCommand.Arguments.Single();
}
- public override int Run(string fileOrDirectory)
+ public override int Execute()
{
- SlnFile slnFile = SlnFileFactory.CreateFromFileOrDirectory(fileOrDirectory);
+ SlnFile slnFile = SlnFileFactory.CreateFromFileOrDirectory(_fileOrDirectory);
if (slnFile.Projects.Count == 0)
{
Reporter.Output.WriteLine(CommonLocalizableStrings.NoProjectsFound);
@@ -44,4 +43,4 @@ namespace Microsoft.DotNet.Tools.Sln.List
return 0;
}
}
-}
+}
\ No newline at end of file
diff --git a/src/dotnet/commands/dotnet-sln/remove/Program.cs b/src/dotnet/commands/dotnet-sln/remove/Program.cs
index c147052cd..6327e2181 100644
--- a/src/dotnet/commands/dotnet-sln/remove/Program.cs
+++ b/src/dotnet/commands/dotnet-sln/remove/Program.cs
@@ -1,49 +1,47 @@
// 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;
+using System.IO;
+using System.Linq;
using Microsoft.DotNet.Cli;
+using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Sln.Internal;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Tools.Common;
-using Microsoft.DotNet.Tools.Sln;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
namespace Microsoft.DotNet.Tools.Sln.Remove
{
- internal class RemoveProjectFromSolutionCommand : DotNetSubCommandBase
+ internal class RemoveProjectFromSolutionCommand : CommandBase
{
- public static DotNetSubCommandBase Create()
+ private readonly AppliedOption _appliedCommand;
+ private readonly string _fileOrDirectory;
+
+ public RemoveProjectFromSolutionCommand(AppliedOption appliedCommand)
{
- var command = new RemoveProjectFromSolutionCommand()
+ if (appliedCommand == null)
{
- Name = "remove",
- FullName = LocalizableStrings.RemoveAppFullName,
- Description = LocalizableStrings.RemoveSubcommandHelpText,
- HandleRemainingArguments = true,
- ArgumentSeparatorHelpText = LocalizableStrings.RemoveSubcommandHelpText,
- };
+ throw new ArgumentNullException(nameof(appliedCommand));
+ }
- command.HelpOption("-h|--help");
-
- return command;
- }
-
- public override int Run(string fileOrDirectory)
- {
- SlnFile slnFile = SlnFileFactory.CreateFromFileOrDirectory(fileOrDirectory);
-
- if (RemainingArguments.Count == 0)
+ if (_appliedCommand.Arguments.Count == 0)
{
throw new GracefulException(CommonLocalizableStrings.SpecifyAtLeastOneProjectToRemove);
}
- var relativeProjectPaths = RemainingArguments.Select((p) =>
- PathUtility.GetRelativePath(
- PathUtility.EnsureTrailingSlash(slnFile.BaseDirectory),
- Path.GetFullPath(p))).ToList();
+ _appliedCommand = appliedCommand;
+ _fileOrDirectory = appliedCommand.Arguments.Single();
+ }
+
+ public override int Execute()
+ {
+ SlnFile slnFile = SlnFileFactory.CreateFromFileOrDirectory(_fileOrDirectory);
+
+ var relativeProjectPaths = _appliedCommand.Arguments.Select(p =>
+ PathUtility.GetRelativePath(
+ PathUtility.EnsureTrailingSlash(slnFile.BaseDirectory),
+ Path.GetFullPath(p)))
+ .ToList();
bool slnChanged = false;
foreach (var path in relativeProjectPaths)
@@ -63,4 +61,4 @@ namespace Microsoft.DotNet.Tools.Sln.Remove
return 0;
}
}
-}
+}
\ No newline at end of file
diff --git a/src/dotnet/commands/dotnet-test/TestCommandParser.cs b/src/dotnet/commands/dotnet-test/TestCommandParser.cs
index 3ba133a82..e35feb0ec 100644
--- a/src/dotnet/commands/dotnet-test/TestCommandParser.cs
+++ b/src/dotnet/commands/dotnet-test/TestCommandParser.cs
@@ -16,7 +16,7 @@ namespace Microsoft.DotNet.Cli
Create.Option(
"-s|--settings",
LocalizableStrings.CmdSettingsDescription,
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: LocalizableStrings.CmdSettingsFile)
.ForwardAs(o => $"/p:VSTestSetting={o.Arguments.Single()}")),
Create.Option(
@@ -27,19 +27,19 @@ namespace Microsoft.DotNet.Cli
Create.Option(
"--filter",
LocalizableStrings.CmdTestCaseFilterDescription,
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: LocalizableStrings.CmdTestCaseFilterExpression)
.ForwardAs(o => $"/p:VSTestTestCaseFilter={o.Arguments.Single()}")),
Create.Option(
"-a|--test-adapter-path",
LocalizableStrings.CmdTestAdapterPathDescription,
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: LocalizableStrings.CmdTestAdapterPath)
.ForwardAs(o => $"/p:VSTestTestAdapterPath={o.Arguments.Single()}")),
Create.Option(
"-l|--logger",
LocalizableStrings.CmdLoggerDescription,
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: LocalizableStrings.CmdLoggerOption)
.ForwardAs(o =>
{
@@ -52,13 +52,13 @@ namespace Microsoft.DotNet.Cli
Create.Option(
"-o|--output",
LocalizableStrings.CmdOutputDescription,
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: LocalizableStrings.CmdOutputDir)
.ForwardAs(o => $"/p:OutputPath={o.Arguments.Single()}")),
Create.Option(
"-d|--diag",
LocalizableStrings.CmdPathTologFileDescription,
- Accept.ExactlyOneArgument
+ Accept.ExactlyOneArgument()
.With(name: LocalizableStrings.CmdPathToLogFile)
.ForwardAs(o => $"/p:VSTestDiag={o.Arguments.Single()}")),
Create.Option(
diff --git a/src/dotnet/dotnet.csproj b/src/dotnet/dotnet.csproj
index 53de43916..549108170 100644
--- a/src/dotnet/dotnet.csproj
+++ b/src/dotnet/dotnet.csproj
@@ -40,7 +40,7 @@
-
+
diff --git a/test/dotnet.Tests/ParserTests/ArgumentForwardingExtensionsTests.cs b/test/dotnet.Tests/ParserTests/ArgumentForwardingExtensionsTests.cs
index 943a04360..99fe3fb88 100644
--- a/test/dotnet.Tests/ParserTests/ArgumentForwardingExtensionsTests.cs
+++ b/test/dotnet.Tests/ParserTests/ArgumentForwardingExtensionsTests.cs
@@ -18,10 +18,10 @@ namespace Microsoft.DotNet.Tests.ParserTests
{
var command = Command("the-command", "",
Option("-o|--one", "",
- ZeroOrOneArgument
+ ZeroOrOneArgument()
.ForwardAs(o => $"/i:{o.Arguments.Single()}")),
Option("-t|--two", "",
- NoArguments
+ NoArguments()
.ForwardAs("/s:true")));
var result = command.Parse("the-command -t -o 123");
@@ -37,7 +37,7 @@ namespace Microsoft.DotNet.Tests.ParserTests
{
var command = Command("the-command", "",
Option("-x", "",
- ZeroOrMoreArguments
+ ZeroOrMoreArguments()
.ForwardAs(o => $"/x:{string.Join("&", o.Arguments)}")));
var result = command.Parse("the-command -x one -x two");
@@ -53,7 +53,7 @@ namespace Microsoft.DotNet.Tests.ParserTests
{
var command = Command("the-command", "",
Option("-x", "",
- ZeroOrMoreArguments
+ ZeroOrMoreArguments()
.Forward()));
var result = command.Parse("the-command -x one");
diff --git a/test/dotnet.Tests/dotnet.Tests.csproj b/test/dotnet.Tests/dotnet.Tests.csproj
index 3c6555049..994f8c214 100644
--- a/test/dotnet.Tests/dotnet.Tests.csproj
+++ b/test/dotnet.Tests/dotnet.Tests.csproj
@@ -42,6 +42,6 @@
-
+