一.在asp.net core中使用多个环境

  ASP.NET Core 配置是基于运行时环境, 使用环境变量。ASP.NET Core 在应用启动时读取环境变量ASPNETCORE_ENVIRONMENT,并将该值存储在 IHostingEnvironment.EnvironmentName 中。ASPNETCORE_ENVIRONMENT 可设置为任意值,但框架支持三个值:Development、Staging 和 Production。 如果发布项目未设置 ASPNETCORE_ENVIRONMENT,则默认为 Production (本机vs中项目Properties\launchSettings.json中environmentVariables默认设置的是Development,如果禁用environmentVariables,那默认则为Production)。

  下面是Startup. Configure中的默认实现,本机默认配置的是Development环境。

            //如果是Development环境
if (env.IsDevelopment())
{
//当捕获同步和异步系统。管道中的异常实例,并生成HTML错误响应。
app.UseDeveloperExceptionPage();
}
else
{
//如果不是Development环境,向管道中添加一个中间件,用于捕获异常、记录异常并进行重置
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}

  

  1.1 Development 模式

开发环境可以启用不应该在生产中公开的功能, 例如ASP.NET Core 模板在开发环境中启用了开发人员异常页(app.UseDeveloperExceptionPage())。当出现异常时,显示错误页信息如下图所示:

  本地计算机开发环境可以在项目的 Properties\launchSettings.json 文件中设置。 在 launchSettings.json 中设置的环境值替代在系统环境中设置的值。新建的mvc项目默认配置如下:

{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:30081",
"sslPort":
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"MyNetCoreStudy_MVC": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

  launchSettings.json 中的 applicationUrl 属性可指定服务器 URL 的列表。 在列表中的 URL 之间使用分号。注意:launchSettings.json只用于本机在vs 中开发使用,在开发中可以选择三种之中任意一种的环境模式。当项目发布后,发布后(iis做反向代理),发布的文件中并不会有launchSettings.json文件。

  如果不用vs来启动应用程序,使用 dotnet run 命令来 启动应用程序时,使用具有 "commandName": "Project" 的第一个配置文件。 commandName 的值指定要启动的 Web 服务器。 commandName 可为以下任一项:IIS Express、IIS、Project(启动 Kestrel 的项目)。

  当使用dotnet run 启动应用时:1会读取 launchSettings.json中的environmentVariables;2是会显示打印出host 环境。

  1.2  Production  模式

   Production 环境应配置为最大限度地提高安全性、性能和应用可靠性。 不同于开发环境的一些通用设置包括:

    (1) 缓存

    (2) 客户端资源被捆绑和缩小,并可能从 CDN (网络分发)提供。

    (3) 已禁用诊断错误页。

    (4) 已启用友好错误页。

    (5) 已启用生产记录和监视。

二. 环境设置

  在项目中为测试设置特定环境通常很有用。 如果未设置环境,默认值为 Production,这会禁用大多数调试功能。设置环境的方法取决于操作系统。例如将asp.net core razor项目发布后,部署到IIS上,访问OtherPages/page1时出现异常。此时默认是Production 环境变量,会显示了error页面信息, 表示已启用友好错误页。如下图所示 :

  

  2.1  修改环境变量

    上面讲到,设置环境的方法取决于操作系统:有Azure 应用服务、Windows、macOS、Linux等。每种操作系统上设置环境变量的方法不同,这里不在介绍,具体参考文档。这里就先只介绍在Windows操作系统上以iis做反向代理的配置环境变量。

    在Windows操作系统上配置环境变量方法有很多。当发布后,文件中有一个web.config。这里就介绍下在web.config中设置 ASPNETCORE_ENVIRONMENT 环境变量。使用 web.config 设置 ASPNETCORE_ENVIRONMENT 环境变量后,它的值会替代系统级设置。

      <aspNetCore processPath="dotnet" arguments=".\MyNetCoreStudy.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>

</aspNetCore>

此时iis上该项目就是Development开发环境了,再次访问OtherPages/page1时出现异常,此时会捕获同步和异步系统。管道中的异常实例,并生成HTML错误响应。详细异常信息如下图所示:

  

三. 发布到IIS上步骤

  下面简单讲下发布到IIS上的步骤实现:

    (1) 安装好IIS,网上很多参考资料。

    (2)下载dotnet-hosting-2.2.1-win.exe 用于在iis上处理对web服务器的请求。下载地址介绍:

      https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/index?view=aspnetcore-2.2#install-the-net-core-hosting-bundle

      在里面找到“当前 .NET Core 托管捆绑包安装程序(直接下载)”这里进去可以下载到当前版本(aspnetcore-2.2),安装后,在iis模块中能看到AspNetCoreModuleV2。对应发布项目中web.config的<handlers>处理。

     <handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>

    (3) 在vs中右击项目发布,选择"iis Ftp" 点击发布。 选择“文件系统”, 目标位置可以选择当前电脑位置如: D:\DonetCoreStudy\IIS

     (4) 在iis这边,添加网站      

    (5) 在应用程序池中对项目(MyNetCoreStudy)  选择无托管代码。

     这样发布到iis上就成功了。

     (6) 发布后打开页面,如果出现数据库连接不上,在发布时要选择,如下图所示:

      还有就是连接配置改成sa的用户名和密码登录,sqlserver服务的登录为本地服务

      

    (7) iis调试,发布后打开网页,在vs 2019中附加进程后,无法进入断点调试,解决是发布为debug模式,如下图所示:

      

四. 基于环境的 Startup 类

  最后在讲下Startup 类约定。当 ASP.NET Core 应用启动时,会启动Startup类。 应用程序可以为不同的环境,单独定义 Startup 类。可以定义例如: StartupDevelopment类、StartupProduction类,Startup类。当程序运行时会选择相应的 Startup 类。 程序会优先考虑名称后缀与当前环境相匹配的类。如果是Developmen环境则程序进入StartupDevelopment类,如果是Production环境则程序进入StartupProduction类。如果找不到匹配的 Startup{EnvironmentName},就会使用 Startup 类。

  基于环境的 Startup 类实现代码如下:

  public class StartupDevelopment
{
public void ConfigureServices(IServiceCollection services)
{
// ...
} public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// ...
}
} // Startup class to use in the Production environment
public class StartupProduction
{
public void ConfigureServices(IServiceCollection services)
{
//...
} public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// ...
}
} // Fallback Startup class
// Selected if the environment doesn't match a Startup{EnvironmentName} class
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
//...
} public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//...
}
}
        /// <summary>
/// 根据环境变量,动态加载Startup的程序集类
/// </summary>
/// <param name="args"></param>
/// <returns></returns>
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var assemblyName = typeof(Startup).GetTypeInfo().Assembly.FullName; return WebHost.CreateDefaultBuilder(args)
.UseStartup(assemblyName);
}

  

参考文献

官方资料:asp.net core 环境

asp.net core 系列 9 环境(Development、Staging 、Production)的更多相关文章

  1. 技术的正宗与野路子 c#, AOP动态代理实现动态权限控制(一) 探索基于.NET下实现一句话木马之asmx篇 asp.net core 系列 9 环境(Development、Staging 、Production)

    黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. “九阴神抓”本是& ...

  2. asp.net core 系列 22 EF(连接字符串,连接复原,DbContext)

    一.连接字符串 在上二篇中,ASP.NET Core 应用程序连接字符串是写死在ConfigureServices代码中,下面介绍通过配置来实现.连接字符串可以存储在 appsettings.json ...

  3. asp.net core 系列 14 错误处理

    一.概述 本文介绍处理 ASP.NET Core 应用中常见错误的一些方法.主要是关于:开发环境异常页:非开发环境配置自定义异常处理页:配置状态代码页(没有正文响应,http状态400~599的). ...

  4. asp.net core 系列 18 web服务器实现

    一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...

  5. asp.net core 系列 16 Web主机 IWebHostBuilder

    一.概述 在asp.net core中,Host主机负责应用程序启动和生存期管理.host主机包括Web 主机(IWebHostBuilder)和通用主机(IHostBuilder).Web 主机是适 ...

  6. asp.net core 系列 17 通用主机 IHostBuilder

    一.概述 ASP.NET Core 通用主机 (HostBuilder),该主机对于托管不处理 HTTP 请求的应用非常有用.通用主机的目标是将 HTTP 管道从 Web 主机 API 中分离出来,从 ...

  7. ASP.NET Core系列(二):创建第一个.Net Core 项目

    前面讲过 .NET Core简介及开发环境安装,本章会讲一讲ASP.NET Core 2.0的项目结构,查看完整的ASP.NET Core系列文章:https://www.cnblogs.com/zh ...

  8. Asp.Net Core 中的环境变量

    Asp.Net Core 中的环境变量 软件开发环境在大多数软件开发组织中,我们通常具有以下开发环境. 开发环境--Development 演示(模拟.临时)环境--Staging 生产环境-- Pr ...

  9. asp.net core系列 30 EF管理数据库架构--必备知识 迁移

    一.管理数据库架构概述 EF Core 提供两种主要方法来保持 EF Core 模型和数据库架构同步.一是以 EF Core 模型为基准,二是以数据库为基准. (1)如果希望以 EF Core 模型为 ...

随机推荐

  1. Python学习最佳路线图

    python语言基础(1)Python3入门,数据类型,字符串(2)判断/循环语句,函数,命名空间,作用域(3)类与对象,继承,多态(4)tkinter界面编程(5)文件与异常,数据处理简介(6)Py ...

  2. c#发送短息验证码

    <add key="WebReference.Service.PostUrl" value="http://106.ihuyi.cn/webservice/sms1 ...

  3. console.log

    其实,console.log 不仅仅有一下应用 console.log() 这个应该是最常用的 console.error() 输出错误信息 会以红色显示 console.assert(bool,”i ...

  4. Java_重载与重写

    在java中,重载与重写都是多态的体现.重载(Overload)体现的是编译时多态,而重写(Override)体现了运行时多态. 重载(Overload): 定义:在一个类中,同名的方法如果有不同的参 ...

  5. AJAX-同源策略 跨域访问

    ## 同源策略 概述: 同源策略是浏览器的一种安全策略,视为同源是指域名,协议,端口完全相同.只有同源的地址才可以通过AJAX方式请求.同源或者不同源说的是两个地址的关系,不同源地址之间请求我们称之为 ...

  6. Spring源码阅读 源码环境搭建(一)

    ring 源码阅读的搭建(一) 一 下载spring源码 进入官方网页:https://spring.io/projects/spring-framework 进入相关的github位置,下载zip包 ...

  7. android中Imageview的布局和使用

    布局: <ImageView android:id="@+id/imt_photo" android:layout_width="fill_parent" ...

  8. Mysql 创建及导入表

    连接数据库 打开命令行输入mysql -uroot -p 进行数据库连接 创建并访问数据库 CREATE DATABASE test: //创建数据库test SHOW DATABSAES; //查看 ...

  9. socket 套接字服务器端和客户端发送信息

    import socket import threading host='' port=6889 def cilenThred(conn,addr): print("成功接受客户端{}的连接 ...

  10. nginx配置ssl证书实现https访问

    一,环境说明 服务器系统:ubuntu16.04LTS 服务器IP地址:47.89.12.99 域名:bjubi.com 二,域名解析到服务器 在阿里云控制台-产品与服务-云解析DNS-找到需要解析的 ...