/// <summary> /// Configures common services for Upgrade Assistant CLI execution, including an IAppCommand that will run when the host starts. /// </summary> /// <typeparam name="TApp">The type of command to start running.</typeparam> /// <param name="host">The host builder to register services in.</param> /// <param name="options">Options provided by the user on the command line.</param> /// <param name="parseResult">The result of parsing command line arguments.</param> /// <returns>The host builder updated to include services necessary to run Upgrade Assistant as a command line app.</returns> public static IHostBuilder UseConsoleUpgradeAssistant <TApp>( this IHostBuilder host, IUpgradeAssistantOptions options, ParseResult parseResult) where TApp : class, IAppCommand { if (options is null) { throw new ArgumentNullException(nameof(options)); } Program.ShowHeader(); const string LogFilePath = "upgrade-assistant.clef"; var logSettings = new LogSettings(options.IsVerbose); return(host .UseUpgradeAssistant <TApp>(options) .ConfigureServices(services => { services.AddSingleton(logSettings); services.AddSingleton(parseResult); services.AddTransient <IUpgradeStartup, UsedCommandTelemetry>(); }) .UseSerilog((context, __, loggerConfiguration) => loggerConfiguration .Enrich.FromLogContext() .MinimumLevelFromConfiguration(context.Configuration.GetSection("Logging:Loglevel")) .MinimumLevel.Override("System", LogEventLevel.Warning) .MinimumLevel.Is(LogEventLevel.Verbose) .WriteTo.Console(levelSwitch: logSettings.Console) .WriteTo.File(new CompactJsonFormatter(), LogFilePath, levelSwitch: logSettings.File))); }
private static void AddStateFactory(this IServiceCollection services, IUpgradeAssistantOptions upgradeOptions) { services.AddSingleton <IUpgradeStateManager, FileUpgradeStateFactory>(); services .AddOptions <FileStateOptions>() .Configure(options => { if (upgradeOptions.Project?.DirectoryName is string directory) { options.Path = Path.Combine(directory, ".upgrade-assistant"); } }) .ValidateDataAnnotations(); }
public static IHostBuilder UseUpgradeAssistant <TApp>(this IHostBuilder host, IUpgradeAssistantOptions upgradeOptions) where TApp : class, IAppCommand { if (host is null) { throw new ArgumentNullException(nameof(host)); } return(host .UseContentRoot(AppContext.BaseDirectory) .UseServiceProviderFactory(new AutofacServiceProviderFactory()) .ConfigureServices((context, services) => { services.AddHttpClient(); // Register this first so the first startup step is to check for telemetry opt-out services.AddTransient <IUpgradeStartup, ConsoleFirstTimeUserNotifier>(); services.AddTelemetry(options => { context.Configuration.GetSection("Telemetry").Bind(options); options.ProductVersion = UpgradeVersion.Current.FullVersion; }); services.AddHostedService <ConsoleRunner>(); services.AddStepManagement(); services.AddExtensions() .AddDefaultExtensions(context.Configuration) .AddFromEnvironmentVariables(context.Configuration); services.TryAddTransient <IUserInput, ConsoleCollectUserInput>(); services.AddAnalysis(options => { options.Format = upgradeOptions.Format ?? context.Configuration["Analysis:DefaultFormat"]; }); services.AddSingleton(new InputOutputStreams(Console.In, Console.Out)); services.AddSingleton <CommandProvider>(); services.TryAddSingleton(new LogSettings(true)); services.AddSingleton <IProcessRunner, ProcessRunner>(); services.AddSingleton <ErrorCodeAccessor>(); services.AddTargetFrameworkSelectors(options => { context.Configuration.GetSection("DefaultTargetFrameworks").Bind(options); options.TargetTfmSupport = upgradeOptions.TargetTfmSupport; }); services.AddScoped <IAppCommand, TApp>(); }) .UseConsoleLifetime(options => { options.SuppressStatusMessages = true; })); }
public static IHostBuilder UseUpgradeAssistant <TApp>(this IHostBuilder host, IUpgradeAssistantOptions upgradeOptions) where TApp : class, IAppCommand { if (host is null) { throw new ArgumentNullException(nameof(host)); } return(host .UseContentRoot(AppContext.BaseDirectory) .UseServiceProviderFactory(new AutofacServiceProviderFactory()) .ConfigureServices((context, services) => { services.AddHttpClient(); // Register this first so the first startup step is to check for telemetry opt-out services.AddTransient <IUpgradeStartup, ConsoleFirstTimeUserNotifier>(); services.AddTelemetry(options => { context.Configuration.GetSection("Telemetry").Bind(options); options.ProductVersion = UpgradeVersion.Current.FullVersion; }); services.AddHostedService <ConsoleRunner>(); services.AddStepManagement(); services.AddStateFactory(upgradeOptions); services.AddExtensions() .AddDefaultExtensions(context.Configuration) .AddFromEnvironmentVariables(context.Configuration) .Configure(options => { options.AdditionalOptions = upgradeOptions.AdditionalOptions; options.CheckMinimumVersion = !UpgradeVersion.Current.IsDevelopment; options.CurrentVersion = UpgradeVersion.Current.Version; foreach (var path in upgradeOptions.Extension) { options.ExtensionPaths.Add(path); } }); services.AddMsBuild(optionss => { if (upgradeOptions.Project?.FullName is string fullname) { optionss.InputPath = fullname; } if (upgradeOptions.VSPath?.FullName is string vspath) { optionss.VisualStudioPath = vspath; } if (upgradeOptions.MSBuildPath?.FullName is string msbuildPath) { optionss.MSBuildPath = msbuildPath; } }); services.AddUserInput(); services.AddAnalysis(options => { options.Format = upgradeOptions.Format; }); services.AddSingleton(new InputOutputStreams(Console.In, Console.Out)); services.AddSingleton <CommandProvider>(); services.TryAddSingleton(new LogSettings(true)); services.AddSingleton <IProcessRunner, ProcessRunner>(); services.AddSingleton <ErrorCodeAccessor>(); services.AddTargetFrameworkSelectors(options => { context.Configuration.GetSection("DefaultTargetFrameworks").Bind(options); options.TargetTfmSupport = upgradeOptions.TargetTfmSupport; }); services.AddReadinessChecks(options => { options.IgnoreUnsupportedFeatures = upgradeOptions.IgnoreUnsupportedFeatures; }); services.AddScoped <IAppCommand, TApp>(); }) .UseConsoleLifetime(options => { options.SuppressStatusMessages = true; })); }