| File: CommandFactory\CommandResolution\PublishedPathCommandResolver.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.Utils; using Microsoft.DotNet.Cli.Utils.Extensions; namespace Microsoft.DotNet.Cli.CommandFactory.CommandResolution; public class PublishedPathCommandResolver( IEnvironmentProvider environment, IPublishedPathCommandSpecFactory commandSpecFactory) : ICommandResolver { private const string PublishedPathCommandResolverName = "PublishedPathCommandResolver"; private readonly IEnvironmentProvider _environment = environment; private readonly IPublishedPathCommandSpecFactory _commandSpecFactory = commandSpecFactory; public CommandSpec Resolve(CommandResolverArguments commandResolverArguments) { var publishDirectory = commandResolverArguments.OutputPath; var commandName = commandResolverArguments.CommandName; var applicationName = commandResolverArguments.ApplicationName; if (publishDirectory == null || commandName == null || applicationName == null) { return null; } var commandPath = ResolveCommandPath(publishDirectory, commandName); if (commandPath == null) { return null; } var depsFilePath = Path.Combine(publishDirectory, $"{applicationName}.deps.json"); if (!File.Exists(depsFilePath)) { Reporter.Verbose.WriteLine(string.Format( CliStrings.DoesNotExist, PublishedPathCommandResolverName, depsFilePath)); return null; } var runtimeConfigPath = Path.Combine(publishDirectory, $"{applicationName}.runtimeconfig.json"); if (!File.Exists(runtimeConfigPath)) { Reporter.Verbose.WriteLine(string.Format( CliStrings.DoesNotExist, PublishedPathCommandResolverName, runtimeConfigPath)); return null; } return _commandSpecFactory.CreateCommandSpecFromPublishFolder( commandPath, commandResolverArguments.CommandArguments.OrEmptyIfNull(), depsFilePath, runtimeConfigPath); } private string ResolveCommandPath(string publishDirectory, string commandName) { if (!Directory.Exists(publishDirectory)) { Reporter.Verbose.WriteLine(string.Format( CliStrings.DoesNotExist, PublishedPathCommandResolverName, publishDirectory)); return null; } return _environment.GetCommandPathFromRootPath(publishDirectory, commandName, ".dll"); } }