Запуск опубликованной версии ядра asp.net из - PullRequest
0 голосов
/ 14 октября 2019

Проблемы при запуске версии конфигурации ядра основного приложения asp.net из cli.

Приложение очень простое, я создал новую Asp.Net с шаблоном Api, поэтому яполучить приложение прогноз погоды.

Я добавил проект SqlServer, используя ядро ​​Entity Framework, и настраиваю его с помощью строки подключения, взятой из файла appsettings.Production.json

  "ConnectionString": {
    "SqlServer": "Server = .; Database = test_Prod; Trusted_Connection = True; "
  },

Мой конструктор класса запуска

    public Startup(IWebHostEnvironment environment)
    {
        _configurationRoot = new ConfigurationBuilder()
            .SetBasePath(environment.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{ environment.EnvironmentName }.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables()
            .Build();

        _environment = environment;
    }

и метод конфигурации

    public void Configure(IApplicationBuilder app, ILogger<Startup> logger)
    {
        if (_environment.IsProduction())

            logger.LogInformation($" { Environment.NewLine } Environment { _environment.EnvironmentName } launched { Environment.NewLine }");

            logger.LogInformation($" ConnectionString : { _configurationRoot.GetSection("ConnectionString").GetValue<string>("SqlServer") }");            { 

            AppContext dbContext = app.ApplicationServices.GetRequiredService<AppContext>();
        }

Я получаю следующее исключение

crit: Microsoft.AspNetCore.Hosting.Diagnostics[6]
      Application startup exception
System.ArgumentNullException: Value cannot be null. (Parameter 'connectionString')
   at Microsoft.EntityFrameworkCore.Utilities.Check.NotEmpty(String value, String parameterName)
   at Microsoft.EntityFrameworkCore.SqlServerDbContextOptionsExtensions.UseSqlServer(DbContextOptionsBuilder optionsBuil

При проверке журналов я получаю Environment is Production, а ConnectionString пуста

Ниже приведены команды, которые я выполняю

  1. dotnet publish -c Выпуск -o out

  2. dotnet. \ Out\ myApp.dll

Что я делаю не так?

Приложение работает при запуске из Visual Studio, а также при запуске из dotnet cli с помощью команды запуска

dotnet run -p. \ MyApp \ myApp.csproj

1 Ответ

1 голос
/ 14 октября 2019
  1. Необходимо убедиться, что appsettings.json или appsettings.production.json физически присутствуют в вашей опубликованной папке.
  2. Если строка подключения находится в appsettings.production.json, вам необходимо перейти наПеременные системной среды (Пуск> Выполнить> rundll32.exe sysdm.cpl, EditEnvironmentVariables) и вручную установите для переменной ASPNETCORE_ENVIRONMENT значение PRODUCTION. Помните, что Visual Studio временно добавляет эту переменную среды во время работы вашего приложения.
  3. Альтернативой шагу 2 будет перемещение строки соединения в appsettings.json
...