dotnet run是如何启动asp.net core站点的

时间:2023-03-09 09:13:30
dotnet run是如何启动asp.net core站点的

在曾经的 asp.net 5 过渡时期,运行 asp.net 5 站点的命令是dnx web;在如今即将到来的 asp.net core 时代,运行 asp.net core 站点的命令是dotnet run(启动控制台程序也是同样的命令)。

在使用dnx web时,需要在project.json中配置对应的web command:

"commands": {
"web": "Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:5004"
}

而使用dotnet run启动asp.net core站点,不需要在project.json中进行额外的配置,但需要增加program.cs文件,并且添加相应的代码,比如以下的代码(来自cli-samples):

public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseServer("Microsoft.AspNetCore.Server.Kestrel")
.UseApplicationBasePath(Directory.GetCurrentDirectory())
.UseDefaultConfiguration(args)
.UseIISPlatformHandlerUrl()
.UseStartup<Startup>()
.Build(); host.Run();
}
}

上面的代码让dotnet run启动 asp.net core 站点的秘密一览无余。

Web应用程序程序与控制台应用程序使用同样的入口,实现了启动方式的统一,变得更简单。

Web站点的启动工作是由WebHostBuilder(源码)起头的,但它只是准备一些启动参数,最终把启动工作交给了真正的主角—WebHost(源码)。

dotnet run只负责加载.NET Core运行环境与调用应用程序的入口,web站点的启动完全由Microsoft.AspNetCore.Hosting负责。dotnet run启动asp.net core站点就是这么简单清晰。