3. Используйте только appSettings.json в вашем Config Builder

еделил некоторые значения в моемappsettings.json для таких вещей, как строки подключения к базе данных, местоположения веб-интерфейсов и т. п., которые различаются для среды разработки, промежуточной и реальной среды.

Есть ли способ иметь несколькоappsettings.json файлы (какappsettings.live.jsonи т. д.) и приложение asp.net просто «знает», какое из них использовать, исходя из конфигурации сборки, которую он запускает?

Ответы на вопрос(3)

потому что это стоит моих нескольких часов на исследования и разработки.

Сначала добавьте ключ к вашемуLaunch.Json файл.

Смотрите ниже оснастку, я добавил"Development" как моя среда

Затем добавьте файл appSetting с тем же именем в ваш проект.

Добавлена ​​оснастка, ищите 2 разных файла с именами.

appSettings.Development.JsonappSetting.json

И, наконец, настройте его на свой класс StartUp, как показано ниже.

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();

        Configuration = builder.Build();
    }

И наконец я запускаю его из терминала, как это.

dotnet run - среда "Развитие"

где развитие - это моя среда.

 Roberto25 нояб. 2018 г., 02:53
Пробовал это, и это прекрасно работает. VS2017 даже отображает разные версии, как под базовым файлом. голосование

вы можете указать конфигурацию приложения после вызоваCreateDefaultBuilder:

public class Program
{
   public static void Main(string[] args)
   {
      BuildWebHost(args).Run();
   }

   public static IWebHost BuildWebHost(string[] args) =>
      WebHost.CreateDefaultBuilder(args)
             .ConfigureAppConfiguration(ConfigConfiguration)
             .UseStartup<Startup>()
             .Build();

   static void ConfigConfiguration(WebHostBuilderContext ctx, IConfigurationBuilder config)
   {
            config.SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("config.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"config.{ctx.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);

   }
 }
 Hecatonchires29 авг. 2018 г., 02:33
СоздаетError CS0266 Cannot implicitly convert type 'Microsoft.AspNetCore.Hosting.IWebHost' to 'Microsoft.AspNetCore.Hosting.IWebHostBuilder'. An explicit conversion exists (are you missing a cast?)в WebHost.CreateDefaultBuiler (...
 DonkeyBanana29 апр. 2018 г., 16:48
Как вы переключаетесь между используемой средой? Есть ли какие-либо изменения, которые должны быть сделаны в любом файле конфигурации? Я понимаю, что мне нужно добавить URL-адрес, который я хочу использовать при запуске проекта в Azure, вappsettings.json и URL, который я хочу выполнить при локальном запуске (F5), чтобыappsettings.Development.json, Это правильно? Моя строка, которую я хочу использовать, находится в файлеlaunchSettings.json и мне немного неясно, как изменить его в зависимости от того, где выполняется приложение (или если оно вообще должно быть изменено).
 Umut Esen30 апр. 2018 г., 17:13
@DonkeyBanana Среда - это не более чем параметр, указанный в свойствах проекта. В VS 2017 щелкните правой кнопкой мыши на проекте> Свойства. При отладке вы увидите текущую среду для ключаASPNETCORE_ENVIRONMENT, Значение - это то, что будет замененоctx.HostingEnvironment.EnvironmentName}, Таким образом, если вы установите это значение в свойствах на «Производство», проект будет искатьconfig.Production.json файл в корневой папке. Для получения дополнительной информации, пожалуйста, просмотрите этоссылка
Решение Вопроса

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
#if SOME_BUILD_FLAG_A
    .AddJsonFile($"appsettings.flag_a.json", optional: true)
#else
    .AddJsonFile($"appsettings.no_flag_a.json", optional: true)
#endif
    .AddEnvironmentVariables();
    this.configuration = builder.Build();
}
 Nick Turner13 апр. 2018 г., 16:40
Вы должны установить переменную окружения в вашей сборке MSBuild / TFS. Условная компиляция приводит к ошибкам для чего-то, что легко обрабатывается в сборках CI. То есть, .AddJsonFile ($ "appsettings. {Env.EnvironmentName} .json", необязательно: true)
 walkerbox14 мая 2018 г., 15:45
Смотри мой ответ (stackoverflow.com/a/50331886/1319086) для переменной среды
 Dmitry31 мая 2018 г., 17:19
Вопрос был о «знании конфигурации сборки»
 tvdias29 мая 2018 г., 17:15
Такой подход заставляет код перекомпилироваться специально для каждой среды, что делает невозможным его перераспределение / установку в другом месте.
 Charleh13 мар. 2019 г., 13:06
Это не должно быть отмечено как принятый ответ - хотя это решение, это не лучшая практика.

Ваш ответ на вопрос