Как получить файл конфигурации для локальной разработки и файл конфигурации для сервера разработки в AspNet Core, не нарушая логику функции IsDevelopment - PullRequest
0 голосов
/ 03 декабря 2018

В AspNet Core я хотел бы иметь другое значение конфигурации при разработке веб-сайта на локальном компьютере и при публикации веб-сайта на сервере разработки.

Например, на моем компьютерефайлы журнала используют путь "..\..\logs\app.log", а на сервере разработки - "w:\logs\app.log".Поскольку по умолчанию AspNet Core использует файл appsettings.Development.json, где бы я ни находился на своем компьютере разработки или на сервере разработки, я не могу установить путь по-другому.

Так как я могу различить, когдакакой код запускается на моем локальном компьютере, и когда он запускается на моем сервере разработки и имеет другие настройки в моих файлах appsettings.json и все еще использует env.IsDevelopment(), который вернет true в обеих средах?Причина, по которой мне это нужно, в том, что Microsoft использует функцию IsDevelopment() в своей собственной логике, и я не хочу ее нарушать.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

.NET Core решает эту проблему с помощью «Сред».

Это похоже на версии, поэтому немного отличается в зависимости от того, какую версию .NET Core вы используете.Короче говоря, ваш код обычно сначала загружает appsettings.json, а затем перезаписывает любые настройки из файла с именем:

appsettings.{env.EnvironmentName}.json

Обратите внимание, что среда применяется к суффиксу appSettings.Чтобы установить среду для своего компьютера, если вы работаете в Windows, вы можете запустить команду powershell, например:

$Env:ASPNETCORE_ENVIRONMENT = "Development"

или быстро просмотреть «Как установить переменные среды».Пока ключом является «ASPNETCORE_ENVIRONMENT», вы можете загружать этот файл в качестве своих настроек.

Подробнее: https://dotnetcoretutorials.com/2017/05/03/environments-asp-net-core/

0 голосов
/ 03 декабря 2018

Из вашего описания я понял, что вы хотите сохранить один файл конфигурации.В этом случае вы можете изменить настройки конфигурации на стороне сервера, используя переменные среды.

Logging__logPath=C:\dir\file.log

эта ссылка может вам помочь https://medium.com/thirddev/overriding-configuration-using-environmental-variables-in-asp-net-core-d38079475654

Если ваш сервер размещен на IIS, тоВы можете изменить переменные среды в Редакторе конфигурации.Вот пошаговые инструкции

  1. Перейдите в приложение в IIS и выберите «Редактор конфигурации».
  2. Выберите редактор конфигурации
  3. Выберите system.webServer / aspNetCore (RC2и RTM) или system.webServer / httpPlatform (RC1) в поле со списком
  4. Выберите Applicationhost.config ... в поле со списком.
  5. Нажмите на элемент enviromentVariables и откройте окно редактирования.
  6. Установите переменные окружения.
  7. Закройте окно и нажмите «Применить».Готово REF: https://stackoverflow.com/a/36836533/1118978

Визальная демонстрация: https://www.andrecarlucci.com/en/setting-environment-variables-for-asp-net-core-when-publishing-on-iis/

Если вы предпочитаете иметь несколько конфигурационных файлов, то:

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

        Configuration = builder.Build();
    }

и переменная средынеобходимо установить ASPNETCORE_ENVIRONMENT=DevServer и ваш файл конфигурации будет appsettings.DevServer.json

...