| File: ProgramBase.cs | Web Access |
| Project: src\aspnetcore\src\Tools\GetDocumentInsider\src\GetDocument.Insider.csproj (GetDocument.Insider) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Text; using Microsoft.Extensions.ApiDescription.Tool.Commands; using Microsoft.Extensions.CommandLineUtils; using Microsoft.Extensions.Tools.Internal; namespace Microsoft.Extensions.ApiDescription.Tool; internal abstract class ProgramBase { private readonly IConsole _console; private readonly IReporter _reporter; public ProgramBase(IConsole console) { _console = console ?? throw new ArgumentNullException(nameof(console)); _reporter = new ConsoleReporter(_console, verbose: false, quiet: false); } protected static IConsole GetConsole() { var console = PhysicalConsole.Singleton; if (console.IsOutputRedirected) { Console.OutputEncoding = Encoding.UTF8; } return console; } // Internal for testing internal int Run(string[] args, CommandBase command, bool throwOnUnexpectedArg) { try { // AllowArgumentSeparator and continueAfterUnexpectedArg are ignored when !throwOnUnexpectedArg _except_ // AllowArgumentSeparator=true changes the help text (ignoring throwOnUnexpectedArg). var app = new CommandLineApplication(throwOnUnexpectedArg, continueAfterUnexpectedArg: true) { AllowArgumentSeparator = !throwOnUnexpectedArg, Error = _console.Error, FullName = Resources.CommandFullName, Name = Resources.CommandFullName, Out = _console.Out, }; command.Configure(app); return app.Execute(args); } catch (Exception ex) { if (ex is CommandException || ex is CommandParsingException) { _reporter.WriteError(ex.Message); } else { _reporter.WriteError(ex.ToString()); } return 1; } } }