ASP.NET точка входа в веб-приложение Core 1 RC2

таким образом, они изменили способ загрузки веб-приложений между asp.net 5 rc1 и rc2.

раньше было так:

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

но в RC2 у меня больше нет ссылки на статический класс WebApplication. Есть идеи?

2 ответов


из РЕПО объявлений:переименование хостинга WebApplication в WebHost

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

пример из MusicStore


поразмыслив над вашим вопросом некоторое время, я думаю, что он состоит из трех частей.

  1. загрузки приложения
  2. точка входа приложения, и
  3. изменение в создании веб-узла (т. е. это отсутствует WebApplication)

загрузки приложения

в rc1 и dnx.exe загружает ваше приложение, в то время как в rc2 скомпилированное консольное приложение (foo.exe) не загрузиться. От bootstrapping, я имею в виду запуск управляемого приложения путем создания процесса, загрузки основной среды CLR в ОЗУ и поиска точки входа вашего приложения. Это требуется dnx.exe в rc1, потому что ваше веб-приложение только притворялось консольным приложением, тогда как в rc2 ваше веб-приложение является консоли приложения, вместе со своим исполняемым файлом. Что делает консольное приложение веб-приложением, так это то, что оно использует ASP.NET основные библиотеки.

запись приложения точка

в обоих rc1 и rc2 точка входа приложения является Main() метод. Вот где мы помещаем первую строку кода, который мы хотим запустить. Это имеет смысл, если учесть, что ASP.NET ядро работает внутри консольное приложение, а точкой входа консольного приложения по умолчанию является его Main() метод.

хостинг класс

в обоих rc1 и rc2 Main() метод вызывает ASP.NET основные библиотеки и первый вызов ASP.NET основной код создает ASP.NET основной хост. В rc1 мы начали это с WebApplication.Run<SomeClass>(). В rc2 мы вместо этого переходим прямо к добавлению промежуточного программного обеспечения в конвейер с вызовом new WebHostBuilder().FluentMiddlewareCall()...Build(). Это ... ASP.NET основной хост, который мы вызываем, не является управляемой точкой входа приложения. Это важное различие.

резюме

In ASP.NET Core rc2, ваше приложение является собственным исполняемым файлом с собственным загрузочным кодом. Это управляемая точка входа-это ее Main() метод. Он становится веб-приложением, поскольку оно ссылается ASP.NET основные библиотеки и создает веб-узел с помощью 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.
} 

исторические сравнения

In ASP.NET 4.x исполняемый файл Internet Information Services (IIS) (InetMgr.exe) загружает среду CLR и использует ее для создания / вызова точки входа управляемого веб-приложения. Эта точка входа -HttpApplication.Application_Start() событие, которое мы можем обрабатывать через Global.asax, чтобы добавить нашу первую линию код.

InetMgr.exe > Runtime > HttpApplication/Global.asax > Application_Start() 

In ASP.NET Core rc1: расширения DNX (dnx.exe) исполняемый файл загружает ядро CLR и использует его для создания/вызова нашего приложения Main() метод. Мы зовем WebApplication и Run<SomeClass>() метод, тем самым создавая хост и создавая http-конвейер.

Dnx.exe > Runtime > Main() > WebApplication.Run<SomeClass>() > ...

In ASP.NET ядро rc2 скомпилированный исполняемый файл нашего приложения (foo.exe) загружает ядро 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