Запуск .NET Core API Linux среды запуска профилей - PullRequest
0 голосов
/ 19 октября 2018

Поэтому я пытаюсь запустить приложение API .NET Core с другими настройками среды.Я читал документацию и, насколько я могу судить, я следовал инструкциям.Тем не менее, когда я запускаю сервис за пределами VS, он взрывается из-за невозможности найти строку подключения.Я явно упускаю что-то простое.

Я настроил два профиля в launchSettings.json "Разработка" и "Подготовка"

"profiles": {
  "IIS Express": {
    "commandName": "Project",
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development"
    }
  },
  "Development": {
    "commandName": "Project",
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development"
    }
  },
  "Staging": {
    "commandName": "Project",
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Staging"
    }
  }

У меня есть следующие файлы конфигурации.

appsettings.json
appsettings.Development.json
appsettings.Staging.json

У меня также есть следующий код в моем Startup.cs:

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

Configuration = builder.Build();

Когда я отлаживаю это, я вижу, что .AddJsonFile($"appsettings.{env.EnvironmentName}.json" загружает ожидаемый файл.Однако, когда я публикую это в каталоге и пытаюсь запустить его, значение connectionString us null.

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

"DefaultConnection": {
    "ConnectionString":
        "Server=name;Port=3307;Database=name;User Id=name;Password=name;"
},

Так как все это работает внутри VS, я уверен, что это все правильно.Однако когда я пытаюсь запустить его, BOOM!

dotnet MyDll.dll --launch-profile Staging

Я только что заметил, что --launch-profile работает только с dotnet run и что, когда я пытаюсь запустить приложение, он ищет Production.jsonфайл.Как использовать различные профили только с помощью команды dotnet, а не команды dotnet run?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Помимо установки переменных среды (AddEnvironmentVariables), вы также можете использовать командную строку (AddCommandLine), вот пример:

public static IHostBuilder CreateDefaultBuilder(string[] args)
{
    var hostBuilder = new HostBuilder()
        // ConfigureHostConfiguration is only for IHostingEnvironment currently
        .ConfigureHostConfiguration(config =>
        {
            config.AddEnvironmentVariables();

            if (args != null)
            {
                // e.g.: dotnet run --environment "Staging"
                config.AddCommandLine(args);
            }
        })
        .ConfigureAppConfiguration((context, builder) =>
        {
            var env = context.HostingEnvironment;
            builder.SetBasePath(AppContext.BaseDirectory)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables();

            if (args != null)
            {
                builder.AddCommandLine(args);
            }
        });

    return hostBuilder;
}
0 голосов
/ 19 октября 2018

Итак, после еще немного возни.Кажется, вам нужно установить переменную среды на сервере, я ошибочно подумал, что это какая-то переменная «среды выполнения», нет, это полная переменная среды уровня ОС:

LINUX

export ASPNETCORE_ENVIRONMENT = Staging

POWERSHELL

$ Env: ASPNETCORE_ENVIRONMENT = "Staging"

WINDOWS

set ASPNETCORE_ENVIRONMENT = Staging

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...