ASP.NET Core 基础知识--环境变量,不同环境自动采用不同配置文件
在一个项目当中,我们经常会有很多不同的环境的参数需要配置,比如
以登录cookie要写的domain为例吧
开发环境的配置:一般是localhost
测试环境:内部解析的测试域名
UAT用户验收测试环境:一般是生产环境上解析的一个域名,环境与生产环境基本一致。
生产环境:正式环境,对外运营使用的域名。
每种环境的域名都不一样,在代码中,我们如何去选定某个环境应该使用哪个配置文件呢?
下面直接上例子
我们appsetting.js配置文件,是可以设置不同环境下对应的文件的。
比如 我们创建一个MVC项目,默认有appsettings.json和appsettings.Development.json 两个配置文件
我们也可以按照格式自定义,比如通常生产环境下的配置文件名为:appsettings.Development.json
它就是以appsettings.XXX.json 为命名格式即可。XXX就是与我们环境名称对应的。
比如在生产环境下,我们一般定位为 appsetttings.Production.json ,其中Production 就是对应我们的环境名称。
下面是重点,文件跟变量名称怎么结合起来呢????
这就涉及到在项目中如何配置环境变量
比如在本机:
vs,项目右键--属性--调试
默认就是Development(开发环境)
那我们经常只在appsetting.json中写配置而已,为啥还能正确获取呢?
这是读取配置文件的一个机制,当指定的环境没有这个变量时,就到appsetting.json中读取,若指定环境的配置文件有对应变量了,它就不会再读取appsetting.json中的配置了。
也就是一个优先级问题,appsetting.json的优先级最低。在生产环境下也一样。
那我们为啥不都直接写在appsetting.json中就好了呢,其实就是我们上面讲的,一个环境对应一个配置文件,部署的时候,我们就不用再次修改配置。
那如果部署在IIS上,我们如何设置IIS对应的环境呢
我们发布后有个文件web.config,打开
将它修改为我们想要的环境即可。
同样的,在linux下我们也可以这么改。
但一般部署到linux 下,我们会写入到系统服务,方便自动启动和利用服务来控制项目启动、停止以及运行状态。
linux下的服务命名可以参考我的另一篇文章:https://www.cnblogs.com/fei686868/p/11234609.html
这样,我们项目中就可以根据环境的情况,定义不同环境下的环境变量。
部署的时候,设置对应的环境名称,即可自动读取对应的环境变量了。