private static IConfigurationBuilder AddFileConfiguration(BuildContext buildContext, IConfigurationBuilder builder) { //todo: use IBuildContext var startupConfiguration = buildContext.StartupConfiguration; var configurationPath = startupConfiguration.ConfigurationPath; var configurationProfile = startupConfiguration.Profile; if (configurationPath != null) { // Базовый путь для чтения конфигураций var configurationBasePath = Path.IsPathRooted(configurationPath) ? configurationPath : Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configurationPath); if (!Directory.Exists(configurationBasePath)) { throw new Exception($"ConfigurationBasePath ${configurationBasePath} doesn't exists"); } buildContext.AddBuildInfo("ConfigurationBasePath", configurationBasePath); // Добавляем файлы из корня конфигурации, переопределяем конфигурацию профильными конфигами builder = builder.AddConfigurationFiles(configurationBasePath); if (!string.IsNullOrEmpty(configurationProfile)) { var dirs = configurationProfile.PathNormalize().Split(Path.DirectorySeparatorChar, '.'); var cumulativePath = configurationBasePath.PathNormalize(); string profileDirectory = string.Empty; foreach (var dir in dirs) { // Путь к профильной конфигурации var subProfileDirectory = Path.Combine(cumulativePath, dir); cumulativePath = subProfileDirectory; if (Directory.Exists(subProfileDirectory)) { profileDirectory = subProfileDirectory; // Переопределяем конфигурацию профильными конфигами builder = builder.AddConfigurationFiles(subProfileDirectory); } } buildContext.AddBuildInfo("ConfigurationProfileDirectory", profileDirectory); } } return(builder); }