| File: Commands\Package\Remove\PackageRemoveCommand.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; using Microsoft.DotNet.Cli.CommandLine; using Microsoft.DotNet.Cli.Commands.NuGet; using Microsoft.DotNet.Cli.Commands.Run; using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.FileBasedPrograms; namespace Microsoft.DotNet.Cli.Commands.Package.Remove; internal sealed class PackageRemoveCommand(ParseResult parseResult) : CommandBase(parseResult) { private readonly PackageRemoveCommandDefinitionBase _definition = (PackageRemoveCommandDefinitionBase)parseResult.CommandResult.Command; public override int Execute() { var arguments = _parseResult.GetValue(_definition.CmdPackageArgument) ?? []; if (arguments is not [{ } packageToRemove]) { throw new GracefulException(CliCommandStrings.PackageRemoveSpecifyExactlyOnePackageReference); } var (fileOrDirectory, allowedAppKinds) = PackageCommandParser.ProcessPathOptions( _definition.FileOption, _definition.ProjectOption, _definition.GetProjectOrFileArgument(), _parseResult); bool isFileBasedApp = allowedAppKinds.HasFlag(AppKinds.FileBased) && VirtualProjectBuilder.IsValidEntryPointPath(fileOrDirectory); Debug.Assert(isFileBasedApp || allowedAppKinds.HasFlag(AppKinds.ProjectBased)); string projectFilePath; if (!File.Exists(fileOrDirectory)) { Debug.Assert(!isFileBasedApp); projectFilePath = MsbuildProject.GetProjectFileFromDirectory(fileOrDirectory); } else { projectFilePath = fileOrDirectory; } if (isFileBasedApp) { projectFilePath = Path.GetFullPath(projectFilePath); } var result = NuGetCommand.Run(TransformArgs(packageToRemove, projectFilePath), isFileBasedApp); return result; } private string[] TransformArgs(string packageId, string projectFilePath) { var args = new List<string>() { "package", "remove", "--package", packageId, "--project", projectFilePath }; args.AddRange(_parseResult .OptionValuesToBeForwarded(new PackageRemoveCommandDefinition()) .SelectMany(a => a.Split(' '))); return [.. args]; } }