运行 来自 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 为空
以下是我正在执行的命令
dotnet publish -c Release -o out
网络.\out\myApp.dll
我做错了什么?
如果 运行 来自 Visual Studio 并且如果 运行 来自 dotnet cli 使用 运行 命令
dotnet run -p .\myApp\myApp.csproj
- 您需要确保 appsettings.json 或 appsettings.production.json 实际存在于您发布的文件夹中
- 如果您的连接字符串在 appsettings.production.json 中,您需要转到系统环境变量(开始 > 运行 > rundll32.exe sysdm.cpl,EditEnvironmentVariables)并手动将 ASPNETCORE_ENVIRONMENT 变量设置为生产。请记住 Visual Studio 在 运行 您的应用程序时瞬时添加该环境变量。
- 第 2 步的替代方法是将您的连接字符串移动到 appsettings.json
从 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 为空
以下是我正在执行的命令
dotnet publish -c Release -o out
网络.\out\myApp.dll
我做错了什么?
如果 运行 来自 Visual Studio 并且如果 运行 来自 dotnet cli 使用 运行 命令
dotnet run -p .\myApp\myApp.csproj
- 您需要确保 appsettings.json 或 appsettings.production.json 实际存在于您发布的文件夹中
- 如果您的连接字符串在 appsettings.production.json 中,您需要转到系统环境变量(开始 > 运行 > rundll32.exe sysdm.cpl,EditEnvironmentVariables)并手动将 ASPNETCORE_ENVIRONMENT 变量设置为生产。请记住 Visual Studio 在 运行 您的应用程序时瞬时添加该环境变量。
- 第 2 步的替代方法是将您的连接字符串移动到 appsettings.json