zoukankan      html  css  js  c++  java
  • Working with multiple environments

    ASP.NET Core引入了对多个环境(例如开发,暂存和生产环境)的支持。 可以用环境变量来指示应用程序正在运行的环境,从而让app来做相应的配置。

    Development, Staging, Production

    ASP.NET Core引用特定的环境变量ASPNETCORE_ENVIRONMENT来描述app当前正在运行的环境。此变量可以设置为任何您喜欢的值,但按照惯例有三个值:开发,暂存和生产。 您将在ASP.NET Core随附的示例和模板中找到这些值如何使用。

    Note:
    在Windows和macOS上,指定的环境名称不区分大小写。 无论是将变量设置为Development还是development或DEVELOPMENT,结果都是一样的。 但是,默认情况下,Linux是区分大小写的操作系统。 环境变量,文件名和设置应该要以区分大小写的标准来设定。

    Development

    对于visual studio 2017的app来说,环境变量设置在Properties文件夹中的launchSettings.json文件。
    它可以配置多个启动模式,比如让IIS Express运行在Staging模式下:

    {
      "iisSettings": {
        "windowsAuthentication": false,
        "anonymousAuthentication": true,
        "iisExpress": {
          "applicationUrl": "http://localhost:40088/",
          "sslPort": 0
        }
      },
      "profiles": {
        "IIS Express": {
          "commandName": "IISExpress",
          "launchBrowser": true,
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
          }
        },
        "IIS Express (Staging)": {
          "commandName": "IISExpress",
          "launchBrowser": true,
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Staging"
          }
        }
      }
    }
    

    Note:
    对项目配置文件或launchSettings.json直接执行的更改可能不会生效,直到重新启动Web服务器

    Warning:
    存储在launchSettings.json中的环境变量不以任何方式保护,并且如果您在此文件中使用环境变量,它将是项目的源代码存储库的一部分。 所以切勿在此文件中存储凭据或其他机密数据。 如果您需要一个地方来存储此类数据,请使用Secret Manager工具。

    Staging

    按照惯例,暂存环境是用于在部署到生产之前的最终测试的预生产环境。 所以我们应当尽量让其物理特性应与生产的相对应,使得生产中可能出现的任何问题,首先发生在暂存环境中,在那里它们可以被修复而不影响用户。

    Production

    生产环境是app的线上版本,由最终用户使用时运行的环境。 应该通过正确的配置,最大限度地提高此环境的安全性,性能和应用程序鲁棒性。 生产环境可能具有的不同于开发的一些常见设置包括:

    • 打开缓存
    • 确保所有客户端资源都打包,最小化,并尽可能从CDN提供
    • 关闭诊断ErrorPages
    • 打开友好的错误页面
    • 启用生产日志记录和监视(例如,Application Insights)

    这绝不是一个完整的列表。

    另外推荐在可能的情况下仅在应用程序的Startup类中执行环境检查,避免在其他地方多次进行重复检查。

    如何确定当前Web运行的环境

    在运行dotnet run之后,console会输出:

    Hosting environment: Production
    Content root path: /app
    Now listening on: http://*:5000
    Application started. Press Ctrl+C to shut down.
    

    Hosting environment指定了当前运行的环境

    Setting the environment

    windows:
    setx ASPNETCORE_ENVIRONMENT "Development"

    如果不生效,则直接在windows的环境变量中设置:计算机->属性->高级->环境变量

    Linux:
    export command

    Determining the environment at runtime

    IHostingEnvironment服务提供了使用环境的核心抽象。 此服务由ASP.NET托管层提供,可以通过依赖注入注入到启动逻辑中。 Visual Studio中的ASP.NET Core网站模板使用此方法加载特定于环境的配置文件(如果存在)并自定义应用程序的错误处理设置。 在这两种情况下,通过在传递到相应方法中的IHostingEnvironment实例和调用EnvironmentName或IsEnvironment来引用当前指定的环境来实现此行为。

    Note:
    如果需要检查应用程序是否在特定环境中运行,请使用env.IsEnvironment(“environmentname”),因为它将正确忽略大小写(而不是检查env.EnvironmentName ==“Development”)。

    例如,您可以在Configure方法中使用以下代码来设置特定于环境的错误处理:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
            app.UseBrowserLink();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }
    }
    

    如果应用程序在开发环境中运行,那么它将启用在Visual Studio中使用“BrowserLink”功能所必需的运行时支持,特定于开发的错误页面(通常不应在生产环境中运行)和特殊的数据库错误页面(提供了一种应用迁移的方法,因此应该仅在开发中使用)。 否则,如果应用程序未在开发环境中运行,则会将标准错误处理页面配置为显示以响应任何未处理的异常。

    您可能需要确定在运行时将哪些内容发送到客户端,具体取决于当前环境。 例如,在开发环境中,通常提供非最小化的javscript和style sheets,因为这样方便调试。 生产和测试环境应部署最小化版本,通常来自CDN。 您可以使用环境标记助手执行此操作。 如果当前环境与使用names属性指定的环境之一匹配,则Environment标记帮助器将仅呈现其中描述的内容。

    <environment names="Development">
        <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
        <link rel="stylesheet" href="~/css/site.css" />
    </environment>
    <environment names="Staging,Production">
        <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/css/bootstrap.min.css"
              asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
              asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
        <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
    </environment>
    

    To get started with using tag helpers in your application see Introduction to Tag Helpers(https://docs.microsoft.com/zh-cn/aspnet/core/mvc/views/tag-helpers/intro)

    Startup conventions

    ASP.NET Core支持基于约定的方法来配置app基于当前环境来启动。 您还可以通过编程方式控制app的行为,根据它所在的环境,允许您创建和管理自己的约定。

    当ASP.NET Core应用程序启动时,启动类用于引导应用程序,加载其配置设置等(了解有关ASP.NET启动的更多信息,https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/startup)。 但是,如果存在一个名为Startup {EnvironmentName}(例如StartupDevelopment)的类,并且ASPNETCORE_ENVIRONMENT环境变量匹配该名称,那么将使用该Startup类。 因此,您可以将Startup配置为开发环境调用,但有一个单独的StartupProduction类,当app在生产环境中运行时使用。 或相反亦然。

    Note
    Calling WebHostBuilder.UseStartup() overrides configuration sections.

    除了基于当前环境使用完全独立的Startup类之外,还可以调整应用程序在启动类中的配置方式。 Configure()和ConfigureServices()方法支持类似于Startup类本身的特定于环境的版本,形式为Configure {EnvironmentName}()和Configure {EnvironmentName} Services()。 如果定义一个方法ConfigureDevelopment(),当环境设置为开发时,它将被调用而不是Configure()。 同样,在同一环境中将调用ConfigureDevelopmentServices()而不是ConfigureServices()。

    Summary

    ASP.NET Core提供了许多功能和约定,允许开发人员轻松控制他们的应用程序在不同环境中的行为。 当将应用程序从开发发布到临时发布到生产时,适当设置环境变量,根据需要优化应用程序的配置来进行调试,测试或生产使用。

  • 相关阅读:
    vim/vi——\n只能被替换或删除 \r只能用来插入或替换
    程序算法与人生选择【转】
    【R】大型机Linux系统安装R及bsub提交R任务
    Mothur 命令手册Mothur命令中文解释(一)
    集群与分布式的区别
    【R】Linux安装R语言包(Installing R packages on Linux)
    Android TableLayout 常用的属性介绍及演示
    handler.obtainMessage()理解
    利用sax处理xml(推荐)
    Android 的权限设置大全3
  • 原文地址:https://www.cnblogs.com/windchen/p/6509251.html
Copyright © 2011-2022 走看看