Working with Multiple Environments(使用多个环境)

                                                           Working with Multiple Environments

        ASP.NET 5提高了跨多环境控制应用程序行为的支持。比如:开发,过度,生产。环境变量用来表明应用程序运行的环境,允许适当配置应用程序。

 In  this   article(在这篇文章中主要介绍的章节如下):

• Development, Staging, Production

• Determining the environment at runtime

• Startup conventions Browse or download samples on GitHub.

Development, Staging, Production

        ASP.NET 5引用特定的环境变量。ASPNET_ENV(or Hosting:Environment)描述了当前正在运行的应用程序的环境。这个变量可以设置任何值,但是按照惯例使用三个值,分别为:Development, Staging, and Production。您将发现这些值用于ASP.NET 5提高那个的样品和模板中。

        当前环境设置能从ASP.NET 5检测到所使用的编程方式,此外,ASP.NET MVC6介绍了Environment Tag Helper,Environment Tag Helper允许MVC视图包括基于当前应用程序环境的某些部分。

Development

       下面是开发应用程序时使用的环境。用Visual Studio 2015时,在项目的调试配置文件中指定环境设置,比如IIS Express,如下图所示:

           

           当修改已创建项目的默认设置,更改在Properties文件夹中的launchSettings.json中被持久化,   包括用到的任何环境变量。在Web配置文件改变 ASPNET_ENV (or Hosting:Environment) 变量为Staging之后,launchSettings.json文件如下所示:

         

{
  "iisSettings": { 
     "windowsAuthentication": false,
     "anonymousAuthentication": true,
     "iisExpress": {  
        "applicationUrl": "http://localhost:40088/", 
        "sslPort": 0 
                    } 
    }, 
  "profiles": {
     "IIS Express": { 
         "commandName": "IISExpress",
         "launchBrowser": true, 
         "environmentVariables": {
              "ASPNET_ENV": "Development" 
            }  
       }, 
     "web": { 
         "commandName": "web",
         "environmentVariables": {
               "Hosting:Environment": "Staging"
           } 
      } 
  } 
}

      Staging环境是预生产环境,在生产环境之前用来最终测试,理想的情况是,它的物理特性能反应项目产品 ,以至于任何问题在Staging环境中第一次出现时就能解决而不影响客户的使用。

Production(产品)

          应用程序运行并被用户使用的环境是Procuction环境。这个环境应该被配置最大的安全性,性能和应用程序的健壮性,production环境中可能有的一些公共设置和开发时有所不同,包括以下。

        Turn on caching

        Ensure all client-side resources are bundled, minified, and potentially served from a CDN 

        Turn off diagnostic ErrorPages

        Turn on friendly error pages
        Enable production logging and monitoring (for example, Application Insights)

        这不是一个完整的列表,最好避免在应用程序的很多部分进行分散环境检查。相反,推荐的方法是尽量在应用程序的Startup类(cs)中执行这种检查。

Determining the environment at runtime(在运行时决定使用环境)

      为了正常工作,IHostingEnvironment服务提供了带有环境的核心抽象概念,ASP.NET hosting层提供了该服务并且通过依赖注入将这个服务注入到启动逻辑中。Visual Studio中的ASP.NET 5 网站模板用这种方法加载特定环境的配置文件(if present),并自定义应用程序的错误处理设置。在这2种情况下,目前指定环境通过调用 EnvironmentName 或者IsEnvironment 将IHostingEnvironment 的实例传递给适当的方法来实现这种行为的。

         如果需要检查在特定的环境中,应用程序是否运行,用env.IsEnvironment("environmentname") ,它能正确地忽略大小写。

         例如,可以使用以下代码在Configure方法中设置环境的具体错误操作:

if (env.IsDevelopment()) 
 { 
   app.UseBrowserLink();  
   app.UseDeveloperExceptionPage(); 
   app.UseDatabaseErrorPage(); 
  } 
 else 
 { 
   app.UseExceptionHandler("/Home/Error"); 
 }

   如果应用程序在开发环境中正常运行,它可能BrowserLink ,开发特定的错误页,否则,配置一个标准的错误页作为对任何未处理异常的响应显示出来。

Startup conventions(启动约定)

      ASP.NET 5支持基于协议的方法在当前环境中配置应用程序的启动。也可以根据环境通过编程的方式控制应用程序的执行,并允许创建和管理自己的协议。

     当ASP.NET应用程序启动时,启动类启动应用程序,加载配置设置等(到ASP.NET  startup了解更多)。然而,如果存在名为Startup{EnvironmentName}的类,(比如StartupDevelopment),ASPNET_ENV环境变量和这个名相匹配,使用启动类。开发时可以配置启动项,当应用程序在Production的环境中运行,将使用一个单独的StartupProduction。反之亦然。

   当应用程序在Development环境中被设置成运行,以下示例项目中的StartupDevelopment将运行。

   在开发期间,运行应用程序,显示欢迎屏幕,示例还包括一个StartupStaging类:

    当ASPNET_ENV设置成Staging,并且应用程序运行,使用StartupStaging类,应用程序将显示字符串声明,并运行在staging 环境中。当环境没有设置成Development或者是Staging时,会运行应用程序默认的Startup类。(据推测,设置为Production,而不是仅限于这三个选项。还要注意,如果没有环境设置,运行默认启动)。

     除了在当前环境下使用完全独立的Startup类,也可以重新在Startup类中配置应用。Configure[Environment]() 和 Configure[Environment]Services()中的Configure()和ConfigureServices()方法支持特定环境的版本,和Startup类本身类似。如果定义了ConfigureDevelopment方法,当环境设置为development时,它将被调用,而不是调用Configure(),同样,在同样的环境中ConfigureDevelopmentServices()方法将被调用,而不是ConfigureServices()方法。

using Microsoft.AspNet.Builder;
namespace Environments
{
public class StartupDevelopment
{
public void Configure(IApplicationBuilder app)
{
app.UseWelcomePage();
}
}
}

  

 using Microsoft.AspNet.Builder; 
using Microsoft.AspNet.Http;

namespace Environments
{
public class StartupStaging
{
public void Configure(IApplicationBuilder app)
{
app.Run(async context =>
{
context.Response.ContentType = "text/plain";
await context.Response.WriteAsync("Staging environment.");
});
}
}
}

   总结

      ASP.NET 5提供类很多特性和协议,允许开发人员在不同的环境中控制应用程序如何执行。当发布应用程序从development到staging到production。环境变量设置适当的环境,允许对应用程序调试,测试或者使用进行优化。

     更多资源

    Configuration

原文地址:https://www.cnblogs.com/wmj01/p/5226977.html