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

时间:2016-02-05 16:23:02

标签: asp.net web-applications asp.net-core

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

过去是:

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

但在RC2中,我不再引用静态类WebApplication。有什么想法吗?

2 个答案:

答案 0 :(得分:20)

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

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

    在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://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

答案 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