ASP.NET Core 6 基础入门系列(9) 项目结构详解之launchSettings.json
- ASP.NET Core 6 基础入门系列(8) 项目结构详解之MVC
- ASP.NET Core 6 基础入门系列(7) 项目结构详解之wwwroot
- ASP.NET Core 6 基础入门系列(6) 项目结构详解之依赖项
- ASP.NET Core 6 基础入门系列(5) 项目结构详解之项目文件管理
- ASP.NET Core 6 基础入门系列(4) 项目结构简介
- ASP.NET Core 6 基础入门系列(3) 新建 ASP.NET Core MVC 6.0 项目
- ASP.NET Core 6 基础入门系列(2) 开发环境准备
- ASP.NET Core 6 基础入门系列(1) ASP.NET Core 6 简介
launchSettings.json 是一个在应用程序启动时自动加载的配置文件,为JSON格式。
通过上图所示的项目结构可以发现,在 .NET Framework 中最常见的 “web.config”、“app.config” 等XML格式的 .conifg 类型的配置文件在 ASP.NET Core Web 项目中已经不存在了。
打开 launchSettings.json 文件,内如如下
1 { 2 "iisSettings": { 3 "windowsAuthentication": false, 4 "anonymousAuthentication": true, 5 "iisExpress": { 6 "applicationUrl": "http://localhost:19620", 7 "sslPort": 44328 8 } 9 }, 10 "profiles": { 11 "DotNet6_Web_Study": { 12 "commandName": "Project", 13 "dotnetRunMessages": true, 14 "launchBrowser": true, 15 "applicationUrl": "https://localhost:7086;http://localhost:5086", 16 "environmentVariables": { 17 "ASPNETCORE_ENVIRONMENT": "Development" 18 } 19 }, 20 "IIS Express": { 21 "commandName": "IISExpress", 22 "launchBrowser": true, 23 "environmentVariables": { 24 "ASPNETCORE_ENVIRONMENT": "Development" 25 } 26 } 27 } 28 }
提示:launchSetting.json 配置文件中的所有设置仅仅针对开发环境,即使用Visual Studio 或 .NET Core CLI 运行 ASP.NET Core 项目时,将使用此文件中的设置。
在(Production)生产环境下是不需要这个配置文件的,所以应用程序发布后生成的文件列表中也不会包含该配置文件。
项目发布后的目录中不包含launchSetting.json文件,也证明了上述的观点
该配置文件可以采用不同的设置启动应用程序。下图是使用VS2022创建的.NET6.0 Web项目中的启动文件。初始的 launchSettings.json 配置文件包含 iisSettings 与 profiles 两个对象,profiles 对象又包含 DotNet6_Web_Study(应用程序名称) 与 IIS Express 两个对象。分别对应 Visual Stuido 的开始调试按钮的下拉选项
如果是初次学习ASP.NET Core Web技术,可能看的一头雾水,不理解里面的配置信息对应什么操作功能。为了便于理解上面配置代码中的每一项含义,打开VS中项目的可视化配置界面就容易理解了。
第一种打开方式:项目->属性->调试(常规)->打开调试启动配置文件UI
第二种打开方式:【标准】工具条->添加或移除按钮->调试目标
在【调试目标】按钮的下拉选项中,点击 “XXXX项目”调试属性
打开【启动配置文件】窗口,左侧面板是命令列表,包含了 DotNet6_Web_Study 与 IIS Express 两个命令,它们们就是 launchSettings.json 文件中 profiles 对象下的两个子对象。其中 DotNet6_Web_Study 命令就是创建的web项目的名称,IIS Express 命令是VS自带的简易IIS调试器的名称。
在这里我们要思考一个问题,在 .NET Framework 时代创建的 Web 项目调试时都是使用 IIS Express 或者 通过附件进程(其实是借用IIS)的方式,为什么 ASP.NET Core Web 项目项目的启动项中增加了以项目名称命名的启动命令呢?仔细思考不难发现这与 .NET Core/.NET5/.NET6+ 能够实现跨平台运行部署有直接的关系。
跨平台要解决的第一个问题就是要实现脱离 Windows Server 与 IIS 之外进行独立的部署与运行。
在 DotNet6_Web_Study 项目属性窗口中,应用程序 -> 常规 -> 输出类型,默认为“控制台应用程序”,这与传统的 ASP.NET Web 项目输出类型(类库)已经不同了。
“控制台应用程序”是可以独立运行的应用程序(它用于监控Web应用程序运行过程中的所有端口、数据、状态等信息),既可以在 Windows Server 上运行也可以在 Linux 上运行,这就彻底摆脱了 IIS 的历史束缚,从而轻装上阵完美的实现了跨平台的目标。
调试 DotNet6_Web_Study 项目,自动启动了 DotNet6_Web_Study.exe 应用程序,默认监控 7086 与 5086 两个端口
浏览器自动启动并加载目标URL
查看电脑右下角的区域,并没有发现启动 IIS Express 简易服务器
关于ASP.NET Core Web 项目的运行方式与服务器信息,后续博客中会有更详细的介绍。
下面介绍第一个启动命令 DotNet6_Web_Study 命令中重要的配置
- commandName
指定要启动的Web服务器。commandName可以是以下任意一项:IISExpress、IIS、Project。
更多属性的详细信息,可通过此链接了解:http://json.schemastore.org/launchsettings 。
- 环境变量
用于区分不同环境下的配置信息,如开发环境,生产环境等。ASP.NET Core Web 项目默认提供了 appsettings.Development.json(开发环境配置) 与 appsettings.json(生产环境配置)两个配置文件。
在 Program.cs 入口文件的第9行,判断了运行环境的类型以启用不同的中间件
关于“环境变量”,后面的博客会有详细的介绍。或者参考微软官方博客《在 ASP.NET Core 中使用多个环境》https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments?view=aspnetcore-6.0
- 启用热重载
热重载是 Visual Studio 2019、2022及更高版本中提供的用于调试时非常编辑的功能。
调试过程中,修改代码并后,不用重新编译,点击“热重载”按钮后可以继续调试,修改的代码立即生效。
如此强大且便捷的功能,强烈推荐使用。更新信息请参考微软开发者博客:https://devblogs.microsoft.com/dotnet/introducing-net-hot-reload/
- 启动浏览器
如果勾选该选项,点击调试并启动“DotNet6_Web_Study”控制台应用程序,然后自动启动浏览器斌访问Web项目。
如果不勾选该选项,点击调试并启动“DotNet6_Web_Study”控制台应用程序,不自动启动浏览器。需要手动打开浏览器,输入应用URL后也可以访问Web程序。
- 应用URL
创建Web项目时,默认分配的两个访问地址。其中 https://localhost:7086 启用了SSL进行安全访问;http://localhost:5086 是普通的访问链接。开发者可以手动修改端口,也可以再增加其他的访问地址。
其中http访问地址与https访问地址中的端口是ASP.NET Core 项目随机分配,取值范围分别位于在 5000-5300 、7000-7300 之间。
这个默认配置是在生成的 Properties/launchSettings.json 文件中指定的,可以被重写。
如果没有指定端口,Kestrel 将绑定到 http://localhost:5000。
- URL
URL的内容类似于ASP.NET WebForm 应用程序中设置的起始页功能。如果这里设置了,则项目默认运行该URL指定的地址,如果未设置,则自动匹配路由列表中配置的规则以加载指定的控制器与Action。
- dotnetRunMessages
在 ASP.NET Core 应用程序运行时提供更即时的反馈。
详细信息请参考:https://github.com/dotnet/sdk/issues/12227。
下面介绍第二个启动命令 IIS Express 命令中重要的配置
这里面一些配置信息与第一个命令中配置信息有很多相似的配置项。下面介绍一些不同的配置项
- 托管模型
使用进程内托管,ASP.NET Core 在与其 IIS 工作进程相同的进程中运行。 进程内承载相较进程外承载提供更优的性能,因为请求并不通过环回适配器进行代理,环回适配器是一个网络接口,用于将传出的网络流量返回给同一计算机。 IIS 使用 Windows 进程激活服务 (WAS) 处理进程管理。
通过进程外托管,ASP.NET Core 应用在独立于 IIS 工作进程的进程中运行,而由模块来处理进程管理。 该模块在第一个请求到达时启动 ASP.NET Core 应用的进程,并在应用关闭或崩溃时重新启动该应用。 这基本上与在 Windows 进程激活服务 (WAS) 托管的进程内运行的应用中出现的行为相同。 使用单独的进程还可以托管同一个应用池中的多个应用。
有关详细信息和配置指南,请参阅以下主题:
有关“托管模型”的更新信息,后续博客会详细介绍,或者参考微软官方博客《ASP.NET Core 运行服务器》
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/?view=aspnetcore-6.0&tabs=windows
- 使用SSL
对应launchSettings.json中第7行。
- 启用匿名身份验证
对应launchSettings.json中第3行。
- 启用 Windows 身份验证
对应launchSettings.json中第4行。
下图是 ASP.NET Web(WebForm 或 MVC)项目中的调试与服务器设置信息,与上述 ASP.NET Core Web 的启动信息做对比,能更直观的理解两者的差异。
成在管理,败在经验;嬴在选择,输在不学! 贵在坚持!
个人作品
BIMFace.SDK.NET
开源地址:https://gitee.com/NAlps/BIMFace.SDK
系列博客:https://www.cnblogs.com/SavionZhang/p/11424431.html
系列视频:https://www.cnblogs.com/SavionZhang/p/14258393.html
技术栈
1、AI、DeepSeek、MiniMax、通义千问
2、Visual Studio、.NET Core/.NET、MVC、Web API、RESTful API、gRPC、SignalR、Java、Python
3、jQuery、Vue.js、Bootstrap、ElementUI
4、数据库:分库分表、读写分离、SQLServer、MySQL、PostgreSQL、Redis、MongoDB、ElasticSearch、达梦DM、GaussDB、OpenGauss
5、架构:DDD、ABP、SpringBoot、jFinal
6、环境:跨平台、Windows、Linux
7、移动App:Android、IOS、HarmonyOS、微信小程序、钉钉、uni-app、MAUI
8、分布式、高并发、云原生、微服务、Docker、CI/CD、DevOps、K8S;Dapr、RabbitMQ、Kafka、RPC、Elasticsearch
欢迎关注作者头条号 张传宁IT讲堂,获取更多IT文章、视频等优质内容。
出处:www.cnblogs.com/SavionZhang
作者:张传宁 技术顾问、培训讲师、微软MCP、系统架构设计师、系统集成项目管理工程师、科技部创新工程师。
专注于企业级通用开发平台、工作流引擎、自动化项目(代码)生成器、SOA 、DDD、 云原生(Docker、微服务、DevOps、CI/CD);PDF、CAD、BIM 审图等研究与应用。
多次参与电子政务、图书教育、生产制造等企业级大型项目研发与管理工作。
熟悉中小企业软件开发过程:可行调研、需求分析、架构设计、编码测试、实施部署、项目管理。通过技术与管理帮助中小企业实现互联网转型升级全流程解决方案。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如有问题,可以通过邮件905442693@qq.com联系。共同交流、互相学习。
如果您觉得文章对您有帮助,请点击文章右下角【推荐】。您的鼓励是作者持续创作的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示