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
поразмыслив над вашим вопросом некоторое время, я думаю, что он состоит из трех частей.
- загрузки приложения
- точка входа приложения, и
- изменение в создании веб-узла (т. е. это отсутствует
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://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