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

 

 

 

这样,我们项目中就可以根据环境的情况,定义不同环境下的环境变量。

部署的时候,设置对应的环境名称,即可自动读取对应的环境变量了。

 

posted @ 2022-11-21 17:40  黄明辉  阅读(763)  评论(0编辑  收藏  举报