《ASP.NET Core 高性能系列》环境(EnvironmentName)的设置

原文:《ASP.NET Core 高性能系列》环境(EnvironmentName)的设置

一、概述

  程序启动时Host捕获到环境相关数据,然后交由IEnvironment(传说要作废,但是觉得这个设计依旧前后矛盾,因为没有考虑好非Web 和Web区分),然后交由IWebHostEnvironment,对于ASP.NET Core环境而言,同样会存储在

IWebHostEnvironment.EnvironmentName,ASP.NET Core框架自身提供Development、Staging、Production三种状态作为EnvironmentName的值,

public interface IWebHostEnvironment : Microsoft.Extensions.Hosting.IHostEnvironment

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2"))
    {
        app.UseExceptionHandler("/Error");
    }
}

二、开发建议

  建议为不同的环境定义不同的Startup类,让ASP.NET Core根据自身环境的不同,加载不同的Startup{EnvironmentName}文件,例如

开发环境会加载StartupDevelopment.cs文件,线上环境加载StartupProduction.cs文件

  Program.cs中对于Startup的加载代码需要采用程序集的方式进行加载.

  public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    var assemblyName = typeof(Startup).GetTypeInfo().Assembly.FullName;
                    webBuilder.UseStartup(assemblyName);
                });
    }

三、设定IWebHostEnvironment.EnvironmentName

1.开发阶段,我们可以通过项目的 Properties\launchSettings.json 进行设置

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

使用 dotnet run 启动应用时:
如果可用,读取 launchSettings.json 。 launchSettings.json 中的 environmentVariables 设置会替代环境变量 。
此时显示承载环境。

交互示例:

PS C:\Websites\EnvironmentsSample> dotnet run
Using launch settings from C:\Websites\EnvironmentsSample\Properties\launchSettings.json...
Hosting environment: Development
Content root path: C:\Websites\EnvironmentsSample
Now listening on: http://localhost:54340
Application started. Press Ctrl+C to shut down.

2.VSCode

使用 Visual Studio Code 时,还可以在 .vscode/launch.json 文件中设置环境变量 。 以下示例将环境设置为 Development

{
   "version": "0.2.0",
   "configurations": [
        {
            "name": ".NET Core Launch (web)",
            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            }
        }
    ]
}

在没有 launchSettings.json 文件的 Development 环境中启动应用时,可以使用环境变量设置环境或者将命令行来启动

3.如何设置环境变量

1) Windows下当前窗口下有效的方式

a.当前cmd窗口下有效

set ASPNETCORE_ENVIRONMENT=Development  //通过set ASPNETCORE_ENVIRONMENT 查看

b.当前powershell下有效

$Env:ASPNETCORE_ENVIRONMENT = "Development"

2) Windows全局设置的方式

a.“控制面板” >“系统” >“高级系统设置进行设置环境变量

b.cmd命令

setx ASPNETCORE_ENVIRONMENT Development /M  // /M表示是否是整台机器,如果没有表示当前用户

c.powershell

[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development", "Machine")

Machine 选项值指明,在系统一级设置环境变量。 如果将选项值更改为 User,就会为用户帐户设置环境变量。

 3)类Unix系的设置方式

?


1

export ASPNETCORE_ENVIRONMENT=Development

  如果要全局生效,请加到相应配置文件中,如下Centos的配置方式

修改/etc/profile文件,此文件是所有用户公用文件,修改可以使环境变量对所有用户生效。 如果要当前用户,则修改~/.bash_profile

在文件末尾加上如下两行代码

export ASPNETCORE_ENVIRONMENT=Development

最后:执行 命令

source /etc/profile
使其修改生效,执行完可通过

echo $ASPNETCORE_ENVIRONMENT=Development
命令查看是否添加成功。

4)其他设置方式

  发布后的程序默认是Production模式的,如果设置了环境变量,就以环境变量为准;我们还可以通过以下方式在代码中强制指定运行环境是什么.

Host.CreateDefaultBuilder(args)
.UseEnvironment("Development")

除此之外,.NET Core还可以在IIS ,IIS程序池,Azure中对EnvironmentName进行设置

四、设置了EnvironmentName为了啥

  简而言之,可以让我们的程序在不同的EnvironmentName下运行不一样的代码。通常不同的环境,我们需要加载不一样的配置,

这是都可以通过EnvironmentName来灵活指定.另外有一些额外知识,如第二段提到那样,ASP.NET Core根据自身环境的不同,加载不同的Startup{EnvironmentName}文件,例如开

发环境会加载StartupDevelopment.cs文件,线上环境加载StartupProduction.cs文件,

不仅如此,同一个Startup,我们可以指定不同的Configure{EnvironmentName}Services,Configure{EnvironmentName} 方法,系统会自动进行加载判断使用哪个

Configure,ConfigureServices

原文地址:https://www.cnblogs.com/lonelyxmas/p/12300934.html

时间: 2024-07-31 16:52:53

《ASP.NET Core 高性能系列》环境(EnvironmentName)的设置的相关文章

《ASP.NET Core 高性能系列》静态文件中间件

原文:<ASP.NET Core 高性能系列>静态文件中间件 一.概述 静态文件(如 HTML.CSS.图片和 JavaScript等文件)是 Web程序直接提供给客户端的直接加载的文件. 较比于程序动态交互的代码而言,其实原理都一样(走Http协议), ASP.NET Core中需要进行一些配置才能提供这些文件. 二.wwwroot 静态文件存储在项目的 Web 程序的 {ContentRoot}/wwwroot目录下,但可通过 UseWebRoot 方法更改路径 . Web 应用程序项目的

《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文!

原文:<ASP.NET Core 高性能系列>致敬伟大的.NET斗士甲骨文! 写在开始 三年前,曾写过一篇文章:从.NET和Java之争谈IT这个行业,当时遭到某些自认为懂得java就了不起的Javaer抨击, 现在可以致敬伟大的.NET斗士甲骨文了 (JDK8以上都需要收费,Android弃用java作为第一语言,别高兴:OpenJDK是甲骨文的). <ASP.NET Core 高性能系列>是一套如何编写高性能Web应用技术系列文章, 我们将从.NET 2开始全面升入.其中我们会

《ASP.NET Core 高性能系列》ASP.NET Core的启动过程(1)

一.一切从头开始 简述:知道事情的真相就应该从头 开始,下面我们代码先行 public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWeb

《ASP.NET Core 高性能系列》关于.NET Core的配置信息的若干事项

1.配置文件的相关闲话 Core自身对于配置文件不是必须品,但由上文分析可知ASP.NET Core默认采用appsettings.json作为配置文件,关于配置信息的优先等级 命令行>环境变量>自我订制的配置(AddUserSecrets)>和当前环境相匹配的appsettings.json中的配置>大于appsettings.json中的配置 关于AddUserSecrets是什么这里简单一言以蔽之:每个开发人员有自己特性的配置数据,这些配置信息仅仅属于个人,不能提交给团队成员

《ASP.NET Core 高性能系列》关于.NET Core的部署方式

概述,.NET Core应用程序可以创建三种类型的部署:FDD SCD FDE 框架依赖的部署(FDD).顾名思义,框架依赖的部署(FDD)依赖于目标系统上是否存在.NET Core版本.由于.NET Core已经存在,因此您的应用程序在不同的.NET Core版本中进行移植.您的应用程序仅包含其自己的代码以及.NET Core库之外的任何第三方依赖项.FDD包含.dll文件,可以通过使用dotnet命令行启动这些文件. 例如,dotnet app.dll运行名为的应用程序app. 自包含的部署

《ASP.NET Core 高性能系列》Span&lt;T&gt;和Memory&lt;T&gt;

一.Span<T>概述 原文:Provides a type- and memory-safe representation of a contiguous region of arbitrary memory. 中文的翻译不准确,这里给出比较厚道的翻译:提供类型T安全.连续的内存区域的表达方式. (图1:Span<T>定义,不是全图) 这里出现高阶语法 readonly ref struct,下面是msdn给的语言规范(或者其核心意义),估计大家会看晕, Span<T>

《ASP.NET Core 高性能系列》关于性能的闲聊

一.通常的性能问题类型 让我们一起看看那些公共的性能问题,看看他们是或者不是.我们将了解到为什么我们常常在开发期间会错过这些问题.我们也会看看当我们考虑性能时语言的选择.延迟.带宽.计算等因素. 二.语言的考虑 人们经常关注所使用的编程语言的速度.然而,这经常没有抓住要点.这是一个非常简单的观点,掩盖了技术选择的细微差别,用任何语言编写速度慢的软件都很容易.由于当今计算机的处理速度非常强大,所以解释性能相对较慢的语言通常足够快,而开发中性能的提高是值得的.要理解所涉及的论点和权衡是很重要的,即使

Jexus 5.8.2 正式发布为Asp.Net Core进入生产环境提供平台支持

Jexus 是一款运行于 Linux 平台,以支持  ASP.NET.PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器.最新版 5.8.2 已经发布,有如下更新: 1,现在大部分网站已经部署HTTPS,大家对于安全越来越重视,顺应潮流新增HTTPS多证书支持,每个网站都可以配置自己独立的SSL证书,现在有2种方式支持网站部署HTTPS. A.添加全服务器使用的SSL配置:如果需要,可以添加一个ssl配置为所有没有单独配置ssl的网站提供共享,这个配置,对支持泛域名的证书

在Linux安装ASP.NET Core运行时环境

我使用的是Centos7 ,其它的Linux请参考微软文档 微软官方介绍文档:                                https://www.microsoft.com/net/learn/get-started/linux/centos 1.添加dotnet 产品  Feed 要开始安装.NET,您需要注册Microsoft签名密钥并添加Microsoft产品提要.这只需要在每台机器上完成一次. 在命令提示符中运行以下命令: sudo rpm --import http