| File: Commands\Sdk\Check\SdkCheckCommand.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 extern alias DotNetNativeWrapper; using System.CommandLine; using System.Text.Json; using System.Text.Json.Serialization; using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.NativeWrapper; using EnvironmentProvider = DotNetNativeWrapper::Microsoft.DotNet.NativeWrapper.EnvironmentProvider; namespace Microsoft.DotNet.Cli.Commands.Sdk.Check; public class SdkCheckCommand : CommandBase { private readonly INETBundleProvider _netBundleProvider; private readonly IReporter _reporter; private readonly IProductCollectionProvider _productCollectionProvider; private readonly string _dotnetPath; private readonly SdkCheckConfig _sdkCheckConfig; public SdkCheckCommand( ParseResult parseResult, INETBundleProvider bundleProvider = null, IProductCollectionProvider productCollectionProvider = null, IReporter reporter = null, string dotnetRoot = null, string dotnetVersion = null) : base(parseResult) { _dotnetPath = dotnetRoot ?? EnvironmentProvider.GetDotnetExeDirectory(); var configFilePath = Path.Combine(_dotnetPath, "sdk", dotnetVersion ?? Product.Version, "sdk-check-config.json"); _sdkCheckConfig = File.Exists(configFilePath) ? JsonSerializer.Deserialize(File.ReadAllText(configFilePath), SdkCheckJsonSerializerContext.Default.SdkCheckConfig) : null; _reporter = reporter ?? Reporter.Output; _netBundleProvider = bundleProvider == null ? new NETBundlesNativeWrapper() : bundleProvider; _productCollectionProvider = productCollectionProvider == null ? new ProductCollectionProvider() : productCollectionProvider; } public override int Execute() { if (_sdkCheckConfig != null && !string.IsNullOrEmpty(_sdkCheckConfig.CommandOutputReplacementString)) { _reporter.WriteLine(); _reporter.WriteLine(_sdkCheckConfig.CommandOutputReplacementString); _reporter.WriteLine(); } else { try { var productCollection = _productCollectionProvider.GetProductCollection( _sdkCheckConfig?.ReleasesUri == null ? null : new Uri(_sdkCheckConfig.ReleasesUri), _sdkCheckConfig?.ReleasesFilePath == null ? null : _sdkCheckConfig.ReleasesFilePath); var environmentInfo = _netBundleProvider.GetDotnetEnvironmentInfo(_dotnetPath); var sdkFormatter = new SdkOutputWriter(environmentInfo.SdkInfo, productCollection, _productCollectionProvider, _reporter); var runtimeFormatter = new RuntimeOutputWriter(environmentInfo.RuntimeInfo, productCollection, _productCollectionProvider, _reporter); sdkFormatter.PrintSdkInfo(); _reporter.WriteLine(); runtimeFormatter.PrintRuntimeInfo(); _reporter.WriteLine(); _reporter.WriteLine(CliCommandStrings.CommandFooter); _reporter.WriteLine(); } catch (HostFxrResolutionException hostfxrResolutionException) { switch (hostfxrResolutionException) { case HostFxrRuntimePropertyNotSetException: throw new GracefulException([CliCommandStrings.RuntimePropertyNotFound], [], isUserError: false); case HostFxrNotFoundException hostFxrNotFoundException: throw new GracefulException([CliCommandStrings.HostFxrCouldNotBeLoaded], [hostFxrNotFoundException.Message], isUserError: false); } } } return 0; } public static int Run(ParseResult parseResult) { #if CLI_AOT return new SdkCheckCommand(parseResult, dotnetRoot: NativeEntryPoint.DotnetRoot).Execute(); #else return new SdkCheckCommand(parseResult).Execute(); #endif } } internal class SdkCheckConfig { public string ReleasesUri { get; set; } public string ReleasesFilePath { get; set; } public string CommandOutputReplacementString { get; set; } } [JsonSerializable(typeof(SdkCheckConfig))] internal partial class SdkCheckJsonSerializerContext : JsonSerializerContext;