これらの.net core 2 Webアプリをいくつか作成しましたが、これまでは問題ありませんでした。
IISExpressでローカルに実行すると正常に実行されますが、デバッグバージョンをサーバー上のIISフォルダーに展開すると問題が発生します。
構成エントリを読み取ったときに見つかりません。
_config["MySettings:MyName"];
ファイルの内容:
appsettings.Development.json
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Trace",
"System": "Information",
"Microsoft": "Information"
}
},
"MySettings": {
"MyName": "JohnDoe"
}
}
appsettings.json
{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Trace"
}
},
"Console": {
"LogLevel": {
"Default": "Warning"
}
}
}
}
launchSetting.json
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:60668/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "api/security",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"WebApi.ViewerSecurity": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/security",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:60669/"
}
}
}
Appsettings.Development.jsonをコピーし、appsettings.Production.jsonに名前を変更すると機能します。
Prodファイルの「MyName」の値を変更してログに記録しました。はい、appsettings.Production.jsonから読み取ります。
方法と理由?生産はどこにも定義されていません。
デフォルトのConfigurationBuilder
はappsettings.<EnvironmentName>.json
ファイルを探しているため、作業している環境に基づいて、このファイルの名前が変更されます。また、IIS ExpressにいるときはDevelopment
にあり、アプリケーションをデプロイするときの環境はProduction
です。これがappsettings.Production.json
が必要な理由です。
デバッグする場合、Development
に設定されるASPNETCORE_ENVIRONMENT
という環境変数があり、ASPNETCORE_ENVIRONMENT
が設定されていないデプロイでは、デフォルトはProduction
です。