launchSettings.json
launchSettings.json为启动配置文件,在项目中“Properties”文件夹中。launchSettings.json文件是ASP.NET Core应用特有的配置标准,用于应用的启动准备工作,包括环境变量,开发端口等。在launchSettings.json文件中进行配置修改,和开发者右键项目属性中所提交的更改的效果是一样的,并且支持同步更新。此文件设置了Visual Studio可以启动的不同环境。
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:58114",
"sslPort": 44305
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"MusicStoreASPNETCoreMVC": {
"commandName": "Project",
"dotnetRunMessages": "true",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
配置文件默认添加了两个节点,其中“iisSettings”用于设置IIS相关的选项,而“profiles”节点定义了一系列用于表示应用启动场景。初始的launchSettings.json文件会默认创建两个Profile,一个被命名为“IIS Express”,另一个则使用当前项目名称来命名。这两个节点分别对应Visual Stuido的开始调试按钮的下拉选项,可以选择对应的选项来启动应用程序。
iisSettings是IIS的配置
- windowsAuthentication:IIS是否启用 Windows 身份验证
- anonymousAuthentication:IIS是否启用匿名身份验证
- applicationUrl:指定 IIS 服务器的地址
- sslPort:指定 IIS 服务器的https端口
profiles中的IIS Express配置
- launchBrowser :一个布尔类型的开关,表示应用程序的时候是否自动启动浏览器
- launchUrl:如果launchBrowser被设置为true,浏览器采用的初始化路径通过该属性进行设置。
- environmentVariables:该属性用来设置环境变量。ASP.NET Core应用中正是利用这样一个环境变量来表示当前的部署环境。多环境的配置可以通过ASPNETCORE_ENVIRONMENT切换。
- commandName:启动当前应用程序的命令类型,有效的选项包括IIS、IISExpress和Project,前三个选项分别表示采用IIS、IISExpress和指定的可执行文件(.exe)来启动应用程序。如果我们使用dotnet clr run命令来启动程序,对应Profile的启动命名名称应该设置为Project,设置为不是Project使用dotnet clr启动时将会报错提示“无法应用启动配置文件“(默认值)”。找不到可用的启动配置文件。”。应用程序任默认托管在Kestrel服务器的应用程序名的进程上。
- applicationUrl:应用程序采用的URL列表,多个URL之间采用分号(“;”)进行分隔。
profiles中的“当前项目名”配置
- 相比IIS Express,多了一个dotnetRunMessages,它是一个布尔值,是否在运行时给予反馈信息。
启动配置文件与进程托管模型配置关系
启动配置文件中commandName启动应用程序的命令类型配置与AspNetCoreHostingModel进程托管模型关系表
commandName | AspNetCoreHostingModel 的值 | Internal Web Server(内部服务器) | External Web Server(外部服务器) |
---|---|---|---|
Project | 忽略托管设置的值 | 只使用一个 Web 服务器 - Kestrel | 只使用一个 Web 服务器 - Kestrel |
IISExpress | 进程内托管(InProcess) | 只使用一个 Web 服务器 - IIS Express | 只使用一个 Web 服务器 - IIS Express |
IISExpress | 进程外托管(OutOfProcess) | Kestrel | IIS Express |
IIS | 进程内托管(InProcess) | 只使用一个 Web 服务器 - IIS | 只使用一个 Web 服务器 - IIS |
IIS | 进程外托管(OutOfProcess) | Kestrel | IIS |
项目的启动
- 不使用launchSettings.json文件:如果在执行dotnet run命令的时候不希望加载launchSettings.json文件,我们可以通过显式指定命令行参数–no-launch-profile来实现。应用会采用KestrelServer默认的监听地址(http://localhost:5000和https://localhost:5001)。由于launchSettings.json根本就没有被加载,所以当前执行环境从Development变成了默认的Production。
- 显式指定URL:如果既不想使用launchSettings.json文件中定义的URL,也不想使用KestrelServer默认采用的监听地址,可以在应用程序中显式指定应用的URL。只需要在启动启动类Program中ConfigureWebHostDefaults内部添加调用IWebHostBuilder的扩展方法UseUrls指定一组以分号分隔的URL即可:webBuilder.UseKestrel() .UseUrls(“http://192.168.2.112:2314;https//28.16.49.45:3568”).UseStartup()。
appsettings.json
ASP.NET Core中的配置源:
- appsettings.json,appsettings.{env.EnvironmentName}.json,(相同的Key在不同的环境(开发、生产)下取对于环境的key value)。
- User secrets (用户机密)(项目右键管理用户机密,会在项目文件中生产UserSecretsId将secrets.json文件关联到本地储存)。
- Environment variables (环境变量,launchSettings.json文件environmentVariables节点下设置和项目-属性-调试-环境变量管理同步设置)。
- Command-line arguments (命令行参数)(clr:dotnet run Key = “xxx”)。
- launchSettings.json(environmentVariables节点下添加配置)
上面的配置来源相同的Key会从下到上一次覆盖
IConfiguration是ASP.NET Core中读取各种配置、资源、信息的服务接口。
可以读取Host.CreateDefaultBuilder方法内部操作对HostBuilder配置的appsettings.json,appsettings.{env.EnvironmentName}.json,User secrets (用户机密), Environment variables (环境变量),Command-line arguments (命令行参数) 等对象加载的应用配置。
通过Startup类构造函数注入IConfiguration服务开启配置相关功能服务
appsettings.json
appsettings.Development.json
secrets.json 存在本地
launchSettings.json