一.在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": 44349
}
},
"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 环境

欢迎添加个人微信号:Like若所思。

欢迎关注我的公众号,不仅为你推荐最新的博文,还有更多惊喜和资源在等着你!一起学习共同进步!

asp.net core 系列 9 三种运行环境和IIS发布的更多相关文章

  1. 【Hadoop离线基础总结】Apache Hadoop的三种运行环境介绍及standAlone环境搭建

    Apache Hadoop的三种运行环境介绍及standAlone环境搭建 三种运行环境 standAlone环境 单机版的hadoop运行环境 伪分布式环境 主节点都在一台机器上,从节点分开到其他机 ...

  2. ASP.NET Core系列(三):启动类Startup

    前面讲了ASP.NET Core 的项目结构,查看完整的ASP.NET Core系列文章:https://www.cnblogs.com/zhangweizhong/category/1477144. ...

  3. ASP.NET Core 系列视频完结,新项目实战课程发布。

    今天把MVC的章节完成了,给大家从头到尾做了一个登录注册的示例,带前后端Model验证,算是完整的示例.同时借助于eShopOnContainers的示例也做了一个DBContextSeed的包装器来 ...

  4. ASP.NET CORE系列【三】使用Entity Framework Core进行增删改查

    身份验证 以前我们熟悉的web.config中配置的form验证,现在没有了.我们来看看在Core里面如何配置: 首先需要NuGet安装一个包:Microsoft.AspNetCore.Authent ...

  5. 【目录】asp.net core系列篇

    随笔分类 - asp.net core系列篇 asp.net core系列 68 Filter管道过滤器 摘要: 一.概述 本篇详细了解一下asp.net core filters,filter叫&q ...

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

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

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

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

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

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

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

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

随机推荐

  1. Flask 蓝图机制及应用

    我们都知道 flask 是一个轻量级的 web 框架,相对于其他同类型框架更为灵活.轻便.安全且容易上手.开发者可以随意编写自己想要的项目结构,同时还有很多的第三方库供君选择.但是灵活的同时也带来了相 ...

  2. 带着canvas去流浪系列之二 绘制折线图

    [摘要] 用canvasAPI实现echarts简易图表 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 任务说明 使用原生canvasAPI绘制 ...

  3. 洛谷 P1920 成功密码 题解

    这是蒟蒻的第一篇题解,(之前的都没过,估计这篇也过不了 回到正题 这题,本蒟蒻第一眼看到以后,就决定咦,这不是模拟吗? 看到世界范围,嗯,打扰了. 扯回正题 首先,暴力肯定是A不了的(至少我A不了 但 ...

  4. Unity3D for iOS初级教程:Part 1/3(上)

    转自:http://www.cnblogs.com/alongu3d/archive/ 如果图片看不到,请查看原文 这篇教材是来自教程团队成员 Christine Abernathy, 他是Faceb ...

  5. mininet(二)简单的路由实验

    mininet(一)实验环境搭建 mininet(二)简单的路由实验 mininet(三)简单的NAT实验 在网上找了 好几个代码都是不能直接复现成功,这里把自己实现成功的代码给大家演示一下. 实验的 ...

  6. Python网络爬虫入门实战(爬取最近7天的天气以及最高/最低气温)

    _ 前言 本文文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Bo_wen   最近两天学习了一下python,并自己写了一个 ...

  7. Selenium之xpath绝对路径表示法

    xpath写法: 绝对路径:以/开始,逐个增加节点用/分割 特点:不能跨级.类似css中的直接子元素选择器 相对路径:用两个斜杠  //      如  //div//p//a 通配符:xpath也有 ...

  8. 文件(图片)转base64

    普通图片转base64 function getBase64(url, callback){ var canvas = document.createElement('canvas'),//创建can ...

  9. .Net Core 3.0 以及其前版本编写自定义主机,以允许本机程式(转载)

    像所有的托管代码一样,.NET Core 应用程序也由主机执行. 主机负责启动运行时(包括 JIT 和垃圾回收器等组件)和调用托管的入口点. 托管 .NET Core 运行时是高级方案,在大多数情况下 ...

  10. 大数据学习笔记——Hadoop编程实战之Mapreduce

    Hadoop编程实战——Mapreduce基本功能实现 此篇博客承接上一篇总结的HDFS编程实战,将会详细地对mapreduce的各种数据分析功能进行一个整理,由于实际工作中并不会过多地涉及原理,因此 ...