Ces mesures environnementales semblent convenir à la plupart des gens, mais je ne suis pas du tout d'accord avec toute cette gestion de l'environnement. Ni le runtime ni le système cible ne savent ce qu'il est. Seul vous, en tant que développeur ou mécanisme de déploiement, savez ce qu'est le système cible.
Tout le monde parle de la variable ASPNETCORE_ENVIRONMENT, même la documentation officielle comme ici https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-3.0 . Mais en fait, quelqu'un doit définir explicitement un système comme système de production, par exemple en définissant une fois manuellement ASPNETCORE_ENVIRONMENT. Voulez-vous vraiment supposer et vous fier au fait que ce paramètre est déjà défini dans chaque environnement que vous utilisez ? Non, vous ne pouvez pas. Que se passe-t-il si vous devez déployer une application console sur un serveur batch où aucun site Web n'est en cours d'exécution ? ASPNETCORE_ENVIRONMENT n'est pas disponible. Que faire si vous devez déployer et exécuter un webapi .net core sans IIS, uniquement avec Kestrel ? Pas de web.config et pas de variable d'environnement. Voulez-vous que votre équipe d'administration/opération définisse cette variable trompeuse pour votre application console ? Dans ce contexte, j'ai vu beaucoup de projets qui ont des paramètres d'application comme celui-ci par projet :
appsettings.json
appsettings.development.json
appsettings.test.json
appsettings.uat.json
appsettings.staging.json
appsettings.production.json
Gardez à l'esprit que par défaut, chacun de ces fichiers sera publié et également déployé sur le système cible. À première vue, il semble très facile de laisser l'environnement "décider" de la configuration à utiliser. Mais vous avez une configuration et aussi des informations d'identification potentiellement déployées sur un système qui n'est pas prévu pour cela.
Conclusion
Je recommande appsettings.json + appsettings.release.json. Le premier est seulement pour dev. Changez-le, jouez avec comme vous voulez. Le dernier est une configuration VALIDE prête pour le déploiement (processus). Avant que le déploiement ne commence, transformez la configuration pour qu'elle soit prête pour le système cible. C'est tout. Plus besoin de compter sur les paramètres de la machine cible, plus de configurations désordonnées. Gardez le contrôle total de votre application, même lorsque les serveurs changent rapidement (comme la mise à l'échelle en général, les VM, le cloud, etc.)
J'apprécie les commentaires constructifs :-)