所以他们改变了他们在asp.net 5 rc1和rc2之间引导web应用程序的方式。
过去是:
public static void Main(string[] args) => WebApplication.Run<Startup>(args);
但在RC2中,我不再引用静态类WebApplication。有什么想法吗?
答案 0 :(得分:20)
在对你的问题进行了一段时间的反思之后,我认为它有三个部分。
WebApplication
)在rc1中dnx.exe
引导您的应用程序,而在rc2
中,您编译的控制台应用程序(foo.exe
)执行引导。通过引导,我的意思是通过创建进程,将Core CLR加载到RAM以及查找应用程序的入口点来启动托管应用程序。这需要在rc1中dnx.exe
,因为您的Web应用程序仅假装是控制台应用程序,而在rc2中,您的Web应用程序是真实控制台应用程序,以及它自己的可执行文件。使控制台应用程序成为Web应用程序的原因是它使用ASP.NET核心库。
在rc1和rc2中,应用程序入口点是Main()
方法。这就是我们放置我们想要运行的第一行代码的地方。这是有道理的,当我们认为ASP.NET Core在控制台应用程序中运行时,控制台应用程序的默认入口点是其Main()
方法。
在rc1和rc2中,Main()
方法调用ASP.NET Core库,第一次调用ASP.NET Core代码创建ASP.NET Core主机。在rc1中,我们使用WebApplication.Run<SomeClass>()
启动了此操作。在rc2中,我们通过调用new WebHostBuilder().FluentMiddlewareCall()...Build()
直接向管道添加中间件。这就是我们调用的ASP.NET核心主机,而不是应用程序的托管入口点。这是一个重要的区别。
在ASP.NET Core rc2中,您的应用程序是它自己的可执行文件,它有自己的引导代码。它的托管入口点是其Main()
方法。它成为Web应用程序,因为它引用ASP.NET Core库并使用new WebHostBuilder()
创建Web主机。
// application entry point
public static void Main(string[] args)
{
// code here will run before the host.
Console.WriteLine("Hello world.");
// this is the rc1 host call.
// WebApplication.Run<Startup>(args);
// this is the rc2 host call
var host = new WebHostBuilder()...
// you shouldn't do work after the host call.
}
在ASP.NET 4.x中 Internet信息服务(IIS)可执行文件(InetMgr.exe
)加载公共语言运行时(CLR)并使用它来创建/调用托管Web应用程序的切入点。这个入口点是HttpApplication.Application_Start()
事件,我们可以通过Global.asax处理它以添加我们的第一行代码。
InetMgr.exe > Runtime > HttpApplication/Global.asax > Application_Start()
在ASP.NET Core rc1中 DNX(dnx.exe
)可执行文件加载Core CLR并使用它来创建/调用我们的应用程序的Main()
方法。我们调用WebApplication
及其Run<SomeClass>()
方法,从而创建主机并构建HTTP管道。
Dnx.exe > Runtime > Main() > WebApplication.Run<SomeClass>() > ...
在ASP.NET Core rc2中我们的应用程序的已编译可执行文件(foo.exe
)加载Core CLR以创建/调用我们的应用程序Main()
方法。我们调用WebHostBuilder()
,从而创建主机并构建HTTP管道。
ConsoleApp.exe > Runtime > Main() > WebHostBuilder() > ...
https://blogs.msdn.microsoft.com/dotnet/2015/11/18/announcing-net-core-and-asp-net-5-rc
http://docs.asp.net/en/latest/tutorials/your-first-aspnet-application.html
答案 1 :(得分:7)
来自公告回复:Hosting renaming WebApplication to WebHost
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseDefaultConfiguration(args)
.UseIISPlatformHandlerUrl()
.UseStartup("MusicStore")
.Build();
host.Run();
}
示例来自MusicStore