| File: Commands\Tool\Run\ToolRunCommand.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 Microsoft.DotNet.Cli.CommandFactory; using Microsoft.DotNet.Cli.CommandFactory.CommandResolution; using Microsoft.DotNet.Cli.ToolManifest; using Microsoft.DotNet.Cli.Utils; namespace Microsoft.DotNet.Cli.Commands.Tool.Run; internal sealed class ToolRunCommand : CommandBase<ToolRunCommandDefinition> { private readonly string? _toolCommandName; private readonly IEnumerable<string>? _forwardArgument; private readonly LocalToolsCommandResolver _localToolsCommandResolver; public bool _allowRollForward; public ToolRunCommand(ParseResult result, LocalToolsCommandResolver? localToolsCommandResolver = null, ToolManifestFinder? toolManifest = null) : base(result) { _toolCommandName = result.GetValue(Definition.CommandNameArgument); _forwardArgument = result.GetValue(Definition.CommandArgument); _localToolsCommandResolver = localToolsCommandResolver ?? new LocalToolsCommandResolver(toolManifest); _allowRollForward = result.GetValue(Definition.RollForwardOption); } public override int Execute() { return ExecuteCommand(_localToolsCommandResolver, _toolCommandName, _forwardArgument, _allowRollForward); } public static int ExecuteCommand(LocalToolsCommandResolver commandResolver, string? toolCommandName, IEnumerable<string>? argumentsToForward, bool allowRollForward) { using var _ = Activities.Source.StartActivity("execute-local-tool"); CommandSpec? commandSpec = commandResolver.ResolveStrict(new CommandResolverArguments() { // since LocalToolsCommandResolver is a resolver, and all resolver input have dotnet- CommandName = $"dotnet-{toolCommandName}", CommandArguments = argumentsToForward, }, allowRollForward); if (commandSpec == null) { throw new GracefulException([string.Format(CliCommandStrings.CannotFindCommandName, toolCommandName)], isUserError: false); } var result = CommandFactoryUsingResolver.Create(commandSpec).Execute(); return result.ExitCode; } }