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>
这样就可以了.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2020-05-12 游览器 reflow