Asp.net Core启动流程讲解(二)
asp.net core内,launchSettings.json提供给开发工具一些参数化,提供开发调试,appsettings.json(appsettings.Development.json)做发行/开发调试时配置参数化
launchSettings.json
Properties 文件夹中找到此文件
1、Visual Studio 或使用.NET Core CLI 运行此 ASP.NET Core 项目时,将使用此文件中的设置。
2、仅用于本地开发环境。
3、默认项目的profiles节点下包括 IIS Express 和 项目同名的节点,前者是Visual Studio的IIS Express调试参数,后者是命令行启动.net core项目的配置参数
可通过配置 profiles/节点/environmentVariables/ASPNETCORE_ENVIRONMENT 实现配置环境变量,通过调用IHostingEnvironment.IsEnvironment实现动态区分环境。
IHostingEnvironment.EnvironmentName会默认读取 ASPNETCORE_ENVIRONMENT 环境变量
Startup类的Configure方法默认实现
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
IHostingEnvironment.IsDevelopment是扩展方法,实际上是
public static bool IsDevelopment(this IHostingEnvironment hostingEnvironment)
{
if (hostingEnvironment == null)
{
throw new ArgumentNullException("hostingEnvironment");
}
return hostingEnvironment.IsEnvironment(EnvironmentName.Development);
}
IHostingEnvironment.IsEnvironment实际上是扩展方法,具体实现如下
public static bool IsEnvironment(this IHostingEnvironment
hostingEnvironment, string environmentName)
{
if (hostingEnvironment == null)
{
throw new ArgumentNullException("hostingEnvironment");
}
return string.Equals(hostingEnvironment.EnvironmentName,
environmentName, 5);
}
最后,实际上区分运行环境是IHostingEnvironment.EnvironmentName加载ASPNETCORE_ENVIRONMENT 环境变量
扩展自定义开发环境
复制launchSettings.json文件的profiles结构,修改一段自定义启动配置
"Debug_Project": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/values",
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Debug"
}
}
Visual Studio 下果然出现了Debug_Project调试启动项
在Startup类的 添加一段测试代码
if (env.IsEnvironment("Debug"))
{
var before = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
Console.WriteLine($"{before}");
}
如愿打印出了Debug,说明程序启动调试时,环境变量ASPNETCORE_ENVIRONMENT的值,如愿变成了"Debug"
1、借助于launchSettings.json,可以在开发调试环境,区分运行环境,比如加载通过参数,加载不同的 appsettings.json 文件,比如开发默认的环境变量值 Development 加载配置文件 appsettings.Development.json,反之则加载 appsettings.json。
2、由于区分IHostingEnvironment.EnvironmentName实际上是指向约定的环境变量 ASPNETCORE_ENVIRONMENT ,可以在发布k8s/docker时,配置环境变量ASPNETCORE_ENVIRONMENT,区分运行环境,做不同的选项加载。
appsettings.json(appsettings.Development.json)
综上所述,appsettings.json(appsettings.Development.json)的加载,实际上是IHostingEnvironment.EnvironmentName实际上是指向约定的环境变量 ASPNETCORE_ENVIRONMENT,读出环境环境,是否为Development,成立,则加载配置文件 appsettings.Development.json,反之则加载配置文件 appsettings.json
后记
深挖了一下Startup配置文件加载过程,发现了很多之前遗漏的知识,这也就是这个分享系列的主旨,查漏补缺,一边写,一边查阅资料,梳理
如果对于内容有交流和学习的,可以加 .Net应用程序框架交流群,群号386092459
分享一个公众号,关注学习/分享的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构