ASP.NET Core 1 RC2 Web应用程序入口点

J-D*_*awG 10 asp.net web-applications asp.net-core

所以他们改变了他们在asp.net 5 rc1和rc2之间引导web应用程序的方式.

它曾经是:

public static void Main(string[] args) => WebApplication.Run<Startup>(args);
Run Code Online (Sandbox Code Playgroud)

但在RC2中,我不再引用静态类WebApplication.有任何想法吗?

Sha*_*tin 20

在对你的问题进行了一段时间的反思后,我认为它有三个部分.

  1. 引导应用程序,
  2. 应用程序入口点,和
  3. 创建Web主机的变化(即此缺失WebApplication)

引导应用程序

在rc1中dnx.exe引导您的应用程序,而在rc2您编译的控制台应用程序(foo.exe)中执行引导.通过引导,我的意思是通过创建进程,将Core CLR加载到RAM中,以及查找应用程序的入口点来启动托管应用程序.这dnx.exe在rc1中是必需的,因为您的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库并使用创建Web主机new WebHostBuilder().

// 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.
} 
Run Code Online (Sandbox Code Playgroud)

历史比较

在ASP.NET 4.x中,Internet信息服务(IIS)可执行文件(InetMgr.exe)加载公共语言运行时(CLR)并使用它来创建/调用托管Web应用程序的入口点.这个入口点就是HttpApplication.Application_Start()事件,我们可以通过Global.asax处理它来添加我们的第一行代码.

InetMgr.exe > Runtime > HttpApplication/Global.asax > Application_Start() 
Run Code Online (Sandbox Code Playgroud)

在ASP.NET Core rc1中: DNX(dnx.exe)可执行文件加载Core CLR并使用它来创建/调用我们的应用程序的Main()方法.我们调用WebApplication它的Run<SomeClass>()方法,从而创建一个主机并构建一个HTTP管道.

Dnx.exe > Runtime > Main() > WebApplication.Run<SomeClass>() > ...
Run Code Online (Sandbox Code Playgroud)

在ASP.NET Core rc2中我们的应用程序编译的executable(foo.exe)加载Core CLR来创建/调用我们的应用程序Main()方法.我们调用WebHostBuilder(),从而创建一个主机并构建一个HTTP管道.

ConsoleApp.exe > Runtime > Main() > WebHostBuilder() > ...
Run Code Online (Sandbox Code Playgroud)

参考

https://vimeo.com/153212604

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

https://github.com/aspnet/Home/wiki/DNX-structure

  • 哇,超级有帮助.感谢遗留,RC1和RC2运行时的概述.在ASP.NET Core 1游戏中,我很惊讶地看到如此重大的体系结构变化. (2认同)

Vic*_*aci 7

来自公告repo:托管将WebApplication重命名为WebHost

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseDefaultConfiguration(args)
        .UseIISPlatformHandlerUrl()
        .UseStartup("MusicStore")
        .Build();
    host.Run();
}
Run Code Online (Sandbox Code Playgroud)

这个例子来自MusicStore

  • UseDefaultConfiguration和UseIISPlatformHandlerUrl不再可用. (2认同)