| File: Commands\Solution\SolutionArgumentValidator.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. #nullable disable using Microsoft.DotNet.Cli.Commands.Solution.Add; using Microsoft.DotNet.Cli.Utils; namespace Microsoft.DotNet.Cli.Commands.Solution; internal static class SolutionArgumentValidator { public enum CommandType { Add, Remove } public static void ParseAndValidateArguments(string _fileOrDirectory, IReadOnlyCollection<string> _arguments, CommandType commandType, bool _inRoot = false, string relativeRoot = null) { if (_arguments.Count == 0) { string message = commandType == CommandType.Add ? CliStrings.SpecifyAtLeastOneProjectToAdd : CliStrings.SpecifyAtLeastOneProjectToRemove; throw new GracefulException(message); } bool hasRelativeRoot = !string.IsNullOrEmpty(relativeRoot); if (_inRoot && hasRelativeRoot) { // These two options are mutually exclusive throw new GracefulException(CliCommandStrings.SolutionFolderAndInRootMutuallyExclusive); } var slnFile = _arguments.FirstOrDefault(path => path.HasExtension(".sln") || path.HasExtension(".slnx")); if (slnFile != null) { string args; if (_inRoot) { args = $"--{SolutionAddCommandDefinition.InRootOptionName} "; } else if (hasRelativeRoot) { args = $"--{SolutionAddCommandDefinition.SolutionFolderOptionName} {string.Join(" ", relativeRoot)} "; } else { args = ""; } var projectArgs = string.Join(" ", _arguments.Where(path => !path.HasExtension(".sln") && !path.HasExtension(".slnx"))); string command = commandType == CommandType.Add ? "add" : "remove"; throw new GracefulException( [ string.Format(CliStrings.SolutionArgumentMisplaced, slnFile), CliStrings.DidYouMean, $" dotnet solution {slnFile} {command} {args}{projectArgs}" ]); } } }