ASP.NET Core 6 基础入门系列(9) 项目结构详解之launchSettings.json

 

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 的启动信息做对比,能更直观的理解两者的差异。

 

posted @   张传宁  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
页脚 HTML 代码
点击右上角即可分享
微信分享提示