Startup在不同环境中的处理
ASP.NET Core引进了在多种环境中对控制应用程序行为的进一步支持,例如开发环境(Development Environment)、预发布环境(Staging Environment),和生产环境(Production Environment)。环境变量(ASPNETCORE_ENVIRONMENT)被用来指示程序在哪个环境中运行,允许程序被正确的配置。
一、运行环境
开发环境(Development):当开发程序时使用。
预发布环境(Staging):按照惯例,Staging环境是预生产环境,用于发布到产品环境前的最终测试。
产品环境(Production):是正在运行并被终端用户使用的环境。这个环境应该配置成最大程度的安全、高效和鲁棒性。
二、环境变量(ASPNETCORE_ENVIRONMENT)
ASP.NET Core使用一个特殊的环境变量——ASPNETCORE_ENVIRONMEN来描述应用程序当前运行的环境。这个变量可以设置成你任何喜欢的值,但约定俗成使用这三个值:Development、Staging和Production。你将在ASP.NET Core提供的样例和模版中找到这些值。
在Windows和macOS中,环境变量名是大小写不敏感的。不管你是把它设置成Development,或者是development,或者是DEVELOPMENT,结果都一样。然而在默认情况下,Linux是大小写敏感的。出于最佳实践的考虑,环境变量、文件名和设置(Setting)应该假定为大小写敏感。
三、设置环境变量
关于在不同环境时,如何设置环境变量,可参考微软的官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments#setting-the-environment
在开发时,我们可以在Visual Studio的设置页中直接修改环境变量(如下图所示),不需要修改系统中的设置。

这个属性页中的设置会被持久化存储到launchSettings.json这个文件中。这个文件位于项目的Properties文件夹下面。

四、根据不同的环境加载不同的Startup类
在上篇中提到程序的主方法中使用到UseStartup<TStartup>()这个方法。这个方法有多个重载,除了可以加载指定的Startup类外,还可以在指定的程序集中根据当前程序运行环境搜索特定的Startup类。搜索规则为寻找名字为"Startup{EnvironmentName}"。例如,当前程序在开发环境中运行时,这个方法就会在你指定的程序集中查找名为"StartupDevelopment"的类。
ASP.NET Core还支持这样的情况:当你在使用UseStartup<TStartup>()指定了一个固定的Startup类后,它还可以根据当前程序运行环境,加载Startup类中以这种格式 "Configure{EnvironmentName}"命名的方法。举个例子,如果程序当前的执行环境是Staging环境,就会调用在Startup类中的ConfigureStaging方法,而不再调用Configure方法。
五、总结
Startup的使用比较灵活,可以把开发、测试、生产独立的环境独立开来,可以在实际中运用起来。
六、参考
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments
Startup在不同环境中的处理的更多相关文章
- Asp.net Core Startup Class中是如何获取配置信息的
默认的网站构建方式 VS2015新建asp.net core项目,项目建立完成后,有两个文件,Program.cs和Startup.cs. public class Program { public ...
- 在ASP.NET Core的startup类中如何使用MemoryCache
问: 下面的代码,在ASP.NET Core的startup类中创建了一个MemoryCache并且存储了三个键值“entryA”,“entryB”,“entryC”,之后想在Controller中再 ...
- 使用 Postman 的 Environments 和 Tests 简化在不同环境中的切换步骤
调试 API 的时候,我们需要经常需要在本地.开发.生产来回切换,还需要面临 Token 失效等的问题,让人头大,看到一些教程有介绍用 Postman 来简化流程,但是实践起来还是遇到一些问题,所以就 ...
- ASP.Net Core 5.0 MVC 配置文件读取,Startup 类中ConfigureServices 方法、Configure 方法的使用
配置文件读取 1. 新建FirstController控制器 在appsettings文件内容替换成以下代码 { "Position": { "Title": ...
- web项目部署在不同环境中需要修改配置文件的解决方法
web项目部署中存在的配置文件问题: web项目以war包的形式,部署在tomcat中,同时项目需要访问一些其他的东东,例如访问数据库,调用别的项目的API.在开发中,这些需要访问的外部地址通常以配置 ...
- tomcat bin 中startup.sh中的环境变量配置
JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64 JRE_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64/jre P ...
- MVC中的Startup.Auth.cs、BundleConfig.cs、FilterConfig.cs和RouteConfig.cs
一.MVC中的Startup.Auth.cs.BundleConfig.cs.FilterConfig.cs和RouteConfig.cs四个文件在app_start中 <1>Bundle ...
- 【春华秋实】深入源码理解.NET Core中Startup的注册及运行
写在前面 开发.NET Core应用,直接映入眼帘的就是Startup类和Program类,它们是.NET Core应用程序的起点.通过使用Startup,可以配置化处理所有向应用程序所做的请求的 ...
- Tomcat 8 中的startup.bat
1. bat文件 批处理文件,在DOS和Windows(任意版本)的系统中,bat文件是可执行文件 2. startup.bat 中涉及的bat语法 2.1 @. echo. echo off @ec ...
随机推荐
- c语言编程上次输入影响下次记过怎么解决要交作业啦求大神相助
秦时鸥总算知道为什么这里这么多的房屋了,当一座吧台和一张张台球桌清理出来的时候他才发现,原来这渔场还有酒吧和桌球厅.
- zabbix环境搭建
zabbix介绍 zabbix是一个开源的监控软件集成了nagos和cat的优势 而且有很多自带的插件可以使用,而且还有api接口供我们使用 zabbix还支持自定义监控项 初始环境- centos ...
- #254 Check for Palindromes
Check for Palindromes 检查回文字符串 如果给定的字符串是回文,返回true,反之,返回false. 如果一个字符串忽略标点符号.大小写和空格,正着读和反着读一模一样,那么这个字符 ...
- SharedPreferences解析
一.概述 SharedPreferences(简称SP)是Android中很常用的数据存储方式,SP采用key-value(键值对)形式,主要用于轻量级的数据存储,尤其适合保存应用的配置参数,但不建议 ...
- 吴恩达机器学习笔记18-多类别分类:一对多(Multiclass Classification_ One-vs-all)
对于之前的一个,二元分类问题,我们的数据看起来可能是像这样: 对于一个多类分类问题,我们的数据集或许看起来像这样: 我用3 种不同的符号来代表3 个类别,问题就是给出3 个类型的数据集,我们如何得到一 ...
- 【Spark调优】Broadcast广播变量
[业务场景] 在Spark的统计开发过程中,肯定会遇到类似小维表join大业务表的场景,或者需要在算子函数中使用外部变量的场景(尤其是大变量,比如100M以上的大集合),那么此时应该使用Spark的广 ...
- shell 中let无法使用的原因
运行 sh let.sh 时,却显示 let: not found 百度之后知道: /bin/sh指向了dash而不是bash,dash不支持let命令. 解决方法: 法1.使用 bash ...
- 简单的ld链接脚本学习
一. 链接脚本的整体认识 什么是链接文件呢?作用是什么呢? 当编写了多个C文件时,我们将他们编译链接成一个可执行的文件,此时就需要用到链接脚本文件(ld).ld脚本主要功能就是:将多个目标文件(.o) ...
- 你不知道的JavaScript --- 作用域相关
本篇是<你不知道的JavaScript>的读书笔记 什么是作用域? 程序离不变量,那么变量存储在哪里?程序需要时如何找到他们? 这些问题说明需要一套设计良好的规则来存储变量, 并且之后可以 ...
- 推荐一篇关于java集合的博文,写的很nice
这也是我自己在网上看到的一篇博文,作者的博文都很棒,以后还会持续为大家推荐好的博文,只要大家不骂我只会转别人的博文,自己不会写,其实这些都是基础,前辈们已经在实践中总结的很细很全了,所以也没必要去总结 ...