运行 来自 cli 的 asp.net 核心的已发布版本

Running a published version of an asp.net core from the cli

从 cli 运行 发布 asp.net 核心应用程序的发布配置版本时出现问题。

该应用程序非常简单,我使用 Api 模板创建了一个新的 Asp.Net,因此我得到了天气预报应用程序。

我添加了一个 SqlServer 项目,使用 Entity Framework 核心,我正在使用从 appsettings.Production.json 文件

中获取的 connectionString 配置它
  "ConnectionString": {
    "SqlServer": "Server = .; Database = test_Prod; Trusted_Connection = True; "
  },

我的启动class构造函数

    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 Release -o out

  2. 网络.\out\myApp.dll

我做错了什么?

如果 运行 来自 Visual Studio 并且如果 运行 来自 dotnet cli 使用 运行 命令

dotnet run -p .\myApp\myApp.csproj

  1. 您需要确保 appsettings.json 或 appsettings.production.json 实际存在于您发布的文件夹中
  2. 如果您的连接字符串在 appsettings.production.json 中,您需要转到系统环境变量(开始 > 运行 > rundll32.exe sysdm.cpl,EditEnvironmentVariables)并手动将 ASPNETCORE_ENVIRONMENT 变量设置为生产。请记住 Visual Studio 在 运行 您的应用程序时瞬时添加该环境变量。
  3. 第 2 步的替代方法是将您的连接字符串移动到 appsettings.json