| File: CliTemplateEngineHost.cs | Web Access |
| Project: src\sdk\src\Cli\Microsoft.TemplateEngine.Cli\Microsoft.TemplateEngine.Cli.csproj (Microsoft.TemplateEngine.Cli) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Console; using Microsoft.TemplateEngine.Abstractions; using Microsoft.TemplateEngine.Edge; namespace Microsoft.TemplateEngine.Cli { public class CliTemplateEngineHost : DefaultTemplateEngineHost, ICliTemplateEngineHost { public CliTemplateEngineHost( string hostIdentifier, string version, Dictionary<string, string> preferences, IReadOnlyList<(Type InterfaceType, IIdentifiedComponent Instance)> builtIns, IReadOnlyList<string>? fallbackHostNames = null, string? outputPath = null, LogLevel logLevel = LogLevel.Information) : base( hostIdentifier, version, preferences, builtIns, fallbackHostNames, loggerFactory: Microsoft.Extensions.Logging.LoggerFactory.Create(builder => { builder .SetMinimumLevel(logLevel) .AddConsole(config => config.FormatterName = nameof(CliConsoleFormatter)); builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<ConsoleFormatter, CliConsoleFormatter>()); builder.Services.Configure<ConsoleFormatterOptions>(config => { config.IncludeScopes = true; config.TimestampFormat = "yyyy-MM-dd HH:mm:ss.fff"; }); })) { string workingPath = FileSystem.GetCurrentDirectory(); IsCustomOutputPath = outputPath != null; OutputPath = outputPath != null ? Path.Combine(workingPath, outputPath) : workingPath; } public string OutputPath { get; } public bool IsCustomOutputPath { get; } private bool GlobalJsonFileExistsInPath { get { const string fileName = "global.json"; string? workingPath = OutputPath; bool found; do { string checkPath = Path.Combine(workingPath, fileName); found = FileSystem.FileExists(checkPath); if (!found) { workingPath = Path.GetDirectoryName(workingPath.TrimEnd('/', '\\')); if (string.IsNullOrWhiteSpace(workingPath) || !FileSystem.DirectoryExists(workingPath)) { workingPath = null; } } } while (!found && (workingPath != null)); return found; } } public override bool TryGetHostParamDefault(string paramName, out string? value) { switch (paramName) { case "GlobalJsonExists": value = GlobalJsonFileExistsInPath.ToString(); return true; default: return base.TryGetHostParamDefault(paramName, out value); } } [Obsolete("Use CreationStatusResult instead")] bool ITemplateEngineHost.OnPotentiallyDestructiveChangesDetected(IReadOnlyList<IFileChange> changes, IReadOnlyList<IFileChange> destructiveChanges) { //return false to return TemplateCreationResult with CreationResultStatus.DestructiveChangesDetected status. return false; } } }