【发布时间】:2020-07-23 17:52:44
【问题描述】:
我有一个 .NET Core 3.1 Web API,我最近推送到开发 Azure VM 以在 IIS 上运行。部署 API 后,我注意到应用程序没有启动,我什至没有得到详细的 IIS 堆栈跟踪,只是一个简单的 404 错误。于是我检查了 Windows 事件查看器,发现如下:
System.ArgumentNullException: Value cannot be null. (Parameter 'connectionString')
at Microsoft.EntityFrameworkCore.Utilities.Check.NotEmpty(String value, String parameterName)
connectionString 键只存在于我的 appsettings.Development.json 中。我突然想到将连接字符串添加到我的 appsettings.json 并且错误消失了。但我想为我的开发环境使用不同的数据库连接字符串。所以我知道你们现在在想什么,所以我继续检查/确认服务器上的环境变量:
C:\windows\system32>reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
ASPNETCORE_ENVIRONMENT REG_SZ Development
ComSpec REG_EXPAND_SZ %SystemRoot%\system32\cmd.exe
所以我继续在我的 Startup 中添加以下内容:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILogger<Startup> logger)
{
var connstr = Configuration.GetConnectionString("MyDbContext");
logger.LogInformation($"ApplicationName: {env.ApplicationName}");
logger.LogInformation($"EnvironmentName: {env.EnvironmentName}");
logger.LogInformation($"ContentRootPath: {env.ContentRootPath}");
logger.LogInformation($"WebRootPath: {env.WebRootPath}");
logger.LogInformation($"DbConnection: {connstr}");
并检查了我的标准输出日志:
info: MyProject.API.Startup[0]
ApplicationName: MyProject.API
info: MyProject.API.Startup[0]
EnvironmentName: Production
info: MyProject.API.Startup[0]
ContentRootPath: C:\inetpub\wwwroot\myapi
info: MyProject.API.Startup[0]
WebRootPath:
info: MyProject.API.Startup[0]
DbConnection: <my connection string from appsettings.json>
所以我不明白这是 .NET Core 3.1 的一些新变化,还是我的 API 没有将 ASPNETCORE_ENVIRONMENT 变量检测为 Development。
【问题讨论】:
标签: c# .net-core entity-framework-core