J'ai créé quelques-unes de ces applications Web .net core 2 et aucun problème jusqu'à celui-ci.
L'exécution locale sous IISExpress s'exécute correctement, mais lorsque je déploie une version de débogage dans un dossier IIS sur le serveur, j'ai des problèmes.
Lorsque je lis l'entrée de configuration, elle est introuvable:
_config["MySettings:MyName"];
contenu des fichiers:
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/"
}
}
}
Si je copie appsettings.Development.json et que je renomme en appsettings.Production.json, cela fonctionne.
J'ai changé la valeur de "MyName" dans le fichier prod et l'ai enregistré. Oui, en lisant dans appsettings.Production.json.
Comment et pourquoi? La production n'est définie nulle part.
La valeur par défaut de ConfigurationBuilder
recherche appsettings.<EnvironmentName>.json
fichier, donc en fonction de l'environnement avec lequel vous travaillez, le nom de ce fichier est modifié. et lorsque vous êtes dans IIS Express, vous êtes dans Development
et lorsque vous déployez votre application, votre environnement est Production
. C'est pourquoi vous avez besoin de appsettings.Production.json
.
Lorsque vous déboguez, il existe une variable d'environnement appelée ASPNETCORE_ENVIRONMENT
qui est défini sur Development
et dans votre déploiement où ASPNETCORE_ENVIRONMENT
n'est pas défini, la valeur par défaut est Production