.NET Core配置多环境的方法步骤

配置多环境是日常开发经常需要用到的操作,实现多环境配置后可以规避生产测试环境混合带来的麻烦和风险,减少项目风险,并且也可以通过多环境来保证生产环境上密钥的安全。

我之前在做iOS开发时,iOS的解决方法是通过多个Target配置不同的环境变量,并且配合宏来实现不同的环境启动时,读取不同的配置,在.NET Core中当然也会有类似的这种方式,并且它比iOS中更简单,只需要注入不同的环境变量即可,而iOS还需要建立多个Target才能实现注入不同的环境变量,.NET Core则可以直接在启动时注入不同的环境变量,根本无需再做其它操作。

方式一:预编译指令DEBUG

#if DEBUG
      //读取环境1配置文件
#else
      //读取环境2配置文件
#endif

如果你只有两套环境,这种方式也勉强够用,在日常开发中,我们基本上都是DeBug模式运行的,在生产环境发布的代码,也基本上都是编译的Release代码,所以使用预编译指令 #if DEBUG 即可以满足这种需求,而且这种操作方式非常简单,只需要准备两个不同的配置文件来给两个不同环境读取即可。

/// <summary>
  /// 全局配置管理类(按照DEBUG/RELEASE区分环境)
  /// </summary>
  public static class MyConfiguration
  {
    public static IConfiguration Configuration { get; set; }
    static MyConfiguration()
    {
    #if DEBUG
      var envPath = "appsettings.Development.json";
    #else
      var envPath = "appsettings.json";
    #endif
      Configuration = new ConfigurationBuilder()
        .Add(new JsonConfigurationSource
        {
          Path = envPath,
          ReloadOnChange = true
        }).Build();
    }
  }

但是如果你想调试生产环境或者想实现两个以上的环境的话,那么就只能使用第二种方式了。

方式二:注入不同环境变量

首先准备好你不同环境的配置文件,例如:

然后选择启动项目Properties下的launchSettings.json文件,添加如下配置:

{
 "profiles": {
  "240": {
   "commandName": "240",
   "launchBrowser": true,
   "launchUrl": "",
   "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Dev240"
   }
  },
  "241": {
   "commandName": "241",
   "launchBrowser": true,
   "launchUrl": "",
   "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Dev241"
   }
  },"243": {
   "commandName": "243",
   "launchBrowser": true,
   "launchUrl": "",
   "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Dev243"
   }
  },"Staging": {
   "commandName": "Staging",
   "launchBrowser": true,
   "launchUrl": "",
   "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Staging"
   }
  }
 }
}

此时,启动选择已然变成这样:

当然,我们也可以直接在启动项目的Properties里面改,如下图:

当然环境变量配置好了之后,我们就需要来使用环境变量,新建一个配置的工具类文件:

/// <summary>
  /// 全局配置管理类(适配多环境)
  /// </summary>
  public static class MyConfigurationHelper
  {
    public static IConfiguration Config { get; set; }
    static MyConfigurationHelper()
    {
      var env = BfServiceProvider.ServiceProvider.GetRequiredService<IHostingEnvironment>();
      Config = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true, true)
        .Build();
    }

  }

  public static class MyServiceProvider
  {
    public static IServiceProvider ServiceProvider { get; set; }
  }

这个文件中提供了一个读取配置 IConfigurationMyConfigurationHelper 类和一个提供 IServiceProvider 容器的 MyServiceProviderIServiceProvider 是.NET Core中的服务容器,他能够访问到程序注入的环境变量,然后进入 Startup.cs 中引用这个文件,并且在 Configure 方法中,将 IApplicationBuilderApplicationServices 传递进去。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  {
    //配置多环境
    MyServiceProvider.ServiceProvider = app.ApplicationServices;
  }

这时,我们回过去看 MyConfigurationHelper 类,它将会在下一次被使用时,从 IServiceProvider 中读取我们选择的启动环境对应的环境变量字符串Dev240、Dev241、Dev243、Staging;从而实现读取不同的配置文件与 IConfiguration Config 中,我们后继使用读取配置文件的操作时,都将使用 MyConfigurationHelper.Config 来进行读取。

发布时区分多环境

在Liunx上面,我们使用supervisor来守护我们的.NET Core应用程序,所以我们想要运行哪个环境,就可以在supervisor的项目配置中进行配置,修改 /etc/supervisord.d/ 下的配置文件键入环境变量如下:

# /etc/supervisord.d/DotNetCoreTest.ini
[program:DotNetCoreTest]
directory=/xxx/DotNetCoreTest
command=dotnet DotNetCoreTest.dll
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/xxx/logs/DotNetCoreTest.log
# 环境变量
environment=ASPNETCORE_ENVIRONMENT=Dev240

方式一在发布时只需要编译Release就能自动读取对应环境的配置文件,无需上面的操作。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • ASP.NET Core环境变量和启动设置的配置教程

    在这一部分内容中,我们来讨论ASP.NET Core中的一个新功能:环境变量和启动设置,它将开发过程中的调试和测试变的更加简单.我们只需要简单的修改配置文件,就可以实现开发.预演.生产环境的切换. ASPNETCORE_ENVIRONMENT ASP.NET Core控制环境切换最核心的东西是"ASPNETCORE_ENVIRONMENT"环境变量,它直接控制当前应用程序运行的环境类型.您可以通过在项目上右键菜单选择"属性"选项,然后切换到"调试"

  • .NET Core Windows环境安装配置教程

    1.安装.NET Core SDK 在windows下开发.NET Core最好使用Visual Studio工具.下载地址与安装: VS2015最新版本:Visual Studio 2015 Update 3* VS环境下的.Net Core:.NET Core 1.0 for Visual Studio 对应下载的文件DotNetCore.1.0.0-VS2015Tools.Preview2.exe .Net Core安装过程(安装过程比较慢,亲们耐心等待): (安装慢,等待中--.) (O

  • Win7中IIS的ASP.NET环境配置简洁版

    工作中需要在Win7中使用IIS搭建ASP.NET的网站,这里分享下配置中的小问题. siyue最开始自己配了一遍,发现使用IIS运行ASP.NET网站时一直报错,想到自己可能配置的有问题,于是上网找点资料看看. 发现有个朋友对这个进行了详细的设置,非常好的介绍,我这里只是稍微总结下,好让自己记得更清楚. 详细内容传送门:Win7旗舰版中的IIS配置asp.net的运行环境 siyue觉得在Win7上配置IIS,一般的安装IIS和建立网站都没问题,(不过要运行ASP必须在开发工具那里安装ASP.

  • win2008 r2 服务器环境配置(FTP/ASP/ASP.Net/PHP)

    以下是FTP/ASP/PHP/ASP.Net环境配置 一.FTP与ASP安装流程通过远程登录VPS,点击计算机管理>角色1.1首先我们选择自己需要装的配置环境ASP与FTP,所以只要在前面打勾再安装就可以了 1.2:需要安装的配置,确认安装 1.3:安装完成 二.安装PHP环境2.1首先我们通过在线平台安装PHP所需要的软件配置 2.2进入平台>产品>框架>选择PHP5.3.8与Windows Cache Extension 1.1 for PHP 5.3安装 2.3安装确认 2.

  • Win7旗舰版中的IIS7配置asp.net的运行环境

    以前弄过好多次,都没有成功,昨天晚上不知怎么地就成功了,借用我同学的一句话,这叫"灵光一闪",废话不多说了,这个成功是有图有视频有真相地哈! 这篇博文发表都三个月了,我自认为算是很详细了,可是还是很多人没有配置出来(天天有人在群里问我怎么配置),所以今天特意录成视频供大家参考. 特意申明:这是配置asp.net运行坏境,不是asp,asp和asp.net是有区别的.asp.net如果还是配置不出可以问,asp就算了,我不懂asp哦!无法帮你解决. Win7旗舰版中的IIS配置asp.n

  • Win 2000下ASP.NET开发环境的配置

    Win 2000下ASP.NET的配置 Win 2000(包括Professional,Server和Advanced Server)在默认情况下是不支持ASP.NET的.必须对它进行一个环境的配置. 客户端 SQL Server .NET 数据提供程序 Microsoft 数据访问组件 (MDAC) 2.6 或更高版本 对系统管理信息的访问 Windows Management Instrumentation (WMI)(在 Windows 2000操作系统一起安装)COM+ 服务 Windo

  • win7和win2008 r2下配置IIS7(ASP.net运行环境)

    1.先要设置应用程序池(ApplicationPool)为Classic.NETAppPool,而不是默认的DefaultAppPool,可以在网站目录里对每个站点设置,也可以在站点进行单独设置. 控制面板--系统和安全--管理工具--Internet信息服务(IIS)管理器,打开IIS管理器.选中左侧的默认网站,单击右侧的高级设置,将应用程序池设置为Classic.NETAppPool. 2.选中左侧的"应用程序池",选中"Classic.NETAppPool",

  • Win 2003中配置ASP.net环境

    大家知道,Microsoft为了更好地预防恶意用户和攻击者的攻击,在默认情况下,没有将 IIS6.0 安装到 Windows Server 2003 家族的成员上.而且,当我们最初安装 IIS6.0 时,该服务在高度安全和"锁定"模式下安装.在默认情况下,IIS6.0 只为静态内容提供服务即,诸如 ASP.ASP.NET.在服务器端的包含文件.WebDAV 发布和 FrontPage Server Extensions 功能只有在启用时才工作.在windows 2003 IIS 6.0

  • .NET Core配置多环境的方法步骤

    配置多环境是日常开发经常需要用到的操作,实现多环境配置后可以规避生产测试环境混合带来的麻烦和风险,减少项目风险,并且也可以通过多环境来保证生产环境上密钥的安全. 我之前在做iOS开发时,iOS的解决方法是通过多个Target配置不同的环境变量,并且配合宏来实现不同的环境启动时,读取不同的配置,在.NET Core中当然也会有类似的这种方式,并且它比iOS中更简单,只需要注入不同的环境变量即可,而iOS还需要建立多个Target才能实现注入不同的环境变量,.NET Core则可以直接在启动时注入不

  • VSCode配置C++环境的方法步骤(MSVC)

     最近心血来潮,想用一下微软的VSCode写一下C++,然而第一步就卡住了,竟然不会配置C++环境,陆陆续续搞了两天,总算是弄明白了,网上msvc教程比较少,就打算分享出来,也记录下自己的历程.  先说说我的理解吧,Visual Studio Code和visual studio不同,后者是属于IDE是个集成开发环境,下载好基本就能直接用来写C++等:  而Visual Studio Code(以下简称VSC)是一个编辑器,简单来说和windows电脑上的那个看.txt文件的记事本一个类别,然而

  • PyCharm 2020.2下配置Anaconda环境的方法步骤

    最近在学习关于Python数据分析与挖掘方面的知识,在学习到Python数据分析工具方面时,需要安装一些第三方扩展库来增强Python的数据分析能力,刚开始我就按照最一般的方法,使用pip包管理工具来安装,但是总是遇到各种错误,失败了很多次,耐心都快被耗尽了. 初次接触这方面的内容,不是太了解,就请教了老师,老师就给我推荐直接安装Anaconda来使用.Anaconda指的是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项(我也不是很懂).废话不多说,

  • docker-compose 配置spring环境的方法步骤

    最近需要打包项目给成员们进行测试,但打包运行后很影响开发,于是打算使用docker模拟生产环境运行打包后的项目,这样就能既开发,又能给成员进行测试了. 由于原项目过大,打算先拿软件工程的大实验试试水,软件工程大实验使用的是spring-boot,redis,mysql,angular,nginx这些环境,先试了试后台的spring-boot,redis,mysql的docker搭建. docker-compose compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快

  • eclipse下配置Spring环境的方法步骤

    工具: jdk1.8 win10 spring5.0 1.准备工作:下载Spring开发应用的插件,api 1.spring插件包:springsource-tool-suite-3.9.4.RELEASE-e4.8.0-updatesite.zip 2.logging日志api文件:commons-logging-1.2-bin.zip,然后解压 3.Spring-framework开发的api:spring-framework-5.0.5.RELEASE-dist.zip,然后解压 2. 安

  • vs2019永久配置opencv开发环境的方法步骤

    有很多同学肯定想学习opencv相关的知识,但是有些情况下每建一次项目都要重新引入下各种文件是不是很苦恼,所以我也面临了这个问题,在网上看到很多的同学的方法,有的也都是很一样的,将什么.dll加入环境变量,然后设置项目配置文件什么的,这些东西我也尝试过,但是很容易忘记,我也特意写了一些笔记,但是有时还是会忘记.恰巧我也升级了vs2019,所以也打算更新下方法,做到一劳永逸.下面是教程部分.首先我们要安装好我们的opencv,然后我们安装以后会看到生成的文件夹.如图 这一切就是基础文件,所以这个务

  • 在Ubuntu中安装VSCode并配置C/C++开发环境的方法步骤

    第一步,打开Ubuntu Software下载VSCode.(so easy) 官网地址:https://code.visualstudio.com/docs/?dv=linux64_deb 然后使用 sudo dpkg -i  xxx.deb解压即可 第二步,如果你的电脑中没有gcc,g++,gdb的话,可以通过以下代码获得. sudo apt-get update //访问源列表,并读取软件列表 sudo apt-get install gcc sudo apt-get install g+

  • Intellij IDEA 2018配置Java运行环境的方法步骤

    个人觉得eclipse提示较少,所以今天就写了这篇文章.使用Intellij IDEA 2018实现Hello,World的时候我遇到了一些问题,解决了,所以希望能够帮到大家. 配置运行环境 前提是您一定是安装了JDK的!JDK配置的方法步骤:https://www.jb51.net/article/137386.htm 新建模块 把安装好的JDK加载进来. 输入名称后,选择你要保存的文件路径. 完成之后点击菜单上的File. 配置SDK,选择安装的JDK路径. 在com.demo的模块下的sr

  • CentOS7.6系统下使用yum配置lnmp环境的方法

    一.安装版本详情 Server: MariaDB Server version: 5.5.60-MariaDB MariaDB Server [root@ln-125 ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@ln-125 ~]# nginx -v nginx version: nginx/1.14.2 [root@ln-125 ~]# php-fpm -v PHP 5.4.16 (fpm-fcg

  • Webpack 4.x搭建react开发环境的方法步骤

    本文介绍了了Webpack 4.x搭建react开发环境的方法步骤,分享给大家,也给自己留个笔记 必要依赖一览(npm install) 安装好. "dependencies": { "babel-core": "^6.26.3", "babel-loader": "^7.1.5", "babel-preset-env": "^1.7.0", "react&

随机推荐