ASP.NET Core – Work with Environment (Development, Staging, Production)

前言

这篇讲一讲发布和环境 (development, staging, production)

 

介绍

我的网站是 host 在 Azure 的 Virtual Machine, 跑 IIS, 没有使用 docker, 就一个简单方式而已.

通常网站会分 3 个阶段

1. development 开发中

2. staging 测试中

3. production 最终使用版

不同环境使用不同的 appsetting 和 web.config. 代码则是同一份. 所以部分代码需要依据环境有所区别.

比如 staging 的时候可能不需要性能优化, 跑多点 log 是 ok 的, production 的时候性能就很重要了.

 

Get environment info

注入 IWebHostEnvironment 或者 IHostEnvironment 就可以获取到环境资料了.

复制代码
public class IndexModel : PageModel
{
    private readonly IWebHostEnvironment _webHostEnvironment;

    public IndexModel(
        IWebHostEnvironment webHostEnvironment
    )
    {
        _webHostEnvironment = webHostEnvironment;
    }

    public string Environment { get; set; } = "";

    public void OnGet()
    {
        Environment = _webHostEnvironment.EnvironmentName; // "Development" | "Staging" | "Production"
        var isDevelopment = _webHostEnvironment.IsDevelopment();
        var isStaging = _webHostEnvironment.IsStaging();
        var isProduction = _webHostEnvironment.IsProduction();
    }
}
复制代码

在 Program.cs 拿 Environment

复制代码
public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);
        var isProduction1 = builder.Environment.IsProduction();
        var app = builder.Build();
        var isProduction2 = app.Environment.IsProduction();
    }
}
复制代码

在 app extension 获取 Environment

复制代码
public static class ErrorHandlingApplicationBuilderExtensions
{
    public static IApplicationBuilder Use404And500Page(
        this IApplicationBuilder app
    )
    {
        var env = app.ApplicationServices.GetRequiredService<IHostEnvironment>();
        return app;
    }
}
复制代码

绝招

参考: StackOverflow – Access environment name in Program.Main in ASP.NET Core

if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == Environments.Development)

 

HTML depend on environment

类似 swtich 的写法

复制代码
<environment include="Development">
  <h1>Hello World – Develement</h1>
</environment>
<environment include="Staging">
  <h1>Hello World – Staging</h1>
</environment>
<environment include="Production">
  <h1>Hello World – Production</h1>
</environment>
复制代码

 

Web.config setup environment

我都是 publish to local folder, 然后通过 remote desktop 链接 Azure virtual machine 把 files copy/paste 进去发布的

dotnet publish TestWebPublish.csproj -o C:\keatkeat\projects\release 

运行完以后, 修改 web.config

本来是

<aspNetCore processPath="dotnet" arguments=".\TestPublish.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />

换成

<aspNetCore processPath="dotnet" arguments=".\TestPublish.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
  </environmentVariables>
</aspNetCore>

这样就可以了.

 

posted @   兴杰  阅读(236)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
历史上的今天:
2020-05-12 游览器 reflow
点击右上角即可分享
微信分享提示