在项目开发的过程中,我们一般都会根据开发环境和生产环境编写两套配置文件。我们该怎么做才能实现一个项目根据环境来自动切换配置文件呢?
我们来看看微软的官方文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/ ,一个应用程序的配置可以来自多个地方,比如命令行参数,环境变量,json文件,xml文件等等,其中和本文最相关的就是这段:
A typical sequence of configuration providers is:
-
Files (appsettings.json, appsettings.<Environment>.json, where <Environment> is the app's current hosting environment)
-
User secrets (Secret Manager) (in the Development environment only)
-
Environment variables
-
Command-line arguments
其中第一条已经写得很明白了,appsettings.json, appsettings.<Environment>.json 这部分文件都会默认的被加载到项目里。其中的<Environment> 是名为"ASPNETCORE_ENVIRONMENT"的环境变量(https://andrewlock.net/how-to-set-the-hosting-environment-in-asp-net-core/)。不配置的时候默认是Production,Visual Studio在LaunchSetting.json中配置成了Development,它可以是任何值。Asp.net core应用也会根据这个变量去加载相应的配置文件。比如Production环境下如果不配置ASPNETCORE_ENVIRONMENT就会默认的去加载appsettings.json和appsettings.Production.json。
值得注意的一点是appsettings.json的优先级是低于appsettings.<Environment>.json的。appsettings.<Environment>.json可以覆盖appsettings.json中的配置项。