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();
    }
}

HTML depend on environment

类似 swtich 的写法

<environment include="Development">
  <h1>Hello World – Develementh1>
environment>
<environment include="Staging">
  <h1>Hello World – Stagingh1>
environment>
<environment include="Production">
  <h1>Hello World – Productionh1>
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>

这样就可以了.

相关