2014-09-23 2 views
6

Я только начал свою борьбу, чтобы понять овин и катану. После Asp.Net tutorial Я создал пустой проект asp.net в VS2013 и добавил ссылку на набор Nuget для Microsoft.Owin.Host.SystemWeb. Проект, который я создал, пуст, как показано.Что делает проект Visual Studio 2013 Project проектом katana?

enter image description here

Это не содержит ничего, кроме AssemblyInfo.cs, Web.config и packages.config. Теперь, когда я бегу (F5) это, говорит

  • Нет сборки найдены содержащий OwinStartupAttribute.
  • Не найдена сборка, содержащая класс запуска или [AssemblyName] .Startup. Чтобы отключить обнаружение запуска OWIN, добавьте appSetting owin: AutomaticAppStartup со значением «false» в вашем web.config. Чтобы указать запуск, класс или метод OWIN, добавьте appSetting owin: AppStartup с полным классом запуска или имя метода конфигурации в вашем web.config.

Теперь вопрос в том, как прийти только путем добавления ссылки на NuGet Microsoft.Owin.Host.SystemWeb, он начал искать что-то конкретное, чтобы Owin как Startup класса и так далее, как указано в сообщении об ошибке? Я имею в виду, что я запускал другой проект без этой ссылки Nuget, и сообщение об ошибке совершенно другое. Кажется, что ничто не изменилось, по крайней мере, в двух файлах AssemblyInfo.cs, Web.config, добавив ссылку Nuget. Насколько я понимаю, добавление Nuget добавило файл package.config и добавило некоторую ссылку на проект. Также я сравнил свойства проекта для вкладки двух проектов по вкладке, и я не нашел разницы! Итак, интересно, что в мире вызывает проект Owin для класса Startup?

+0

http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection –

ответ

4

Секрет в том, что Katana использует функцию ASP.NET, называемую PreAppStart. Вы можете увидеть исходники здесь:

https://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Host.SystemWeb/PreApplicationStart.cs

Если сборка в приложение ASP.NET имеет этот атрибут уровня сборки:

[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "Initialize")] 

Затем ASP.NET будет автоматически запускать этот код, приложение запускается. Этот код будет запущен до того, как будет запущен код пользователя, до того, как произойдет событие Application_Start. Вот почему он называется PreAppStart.

В случае Катаны этот код динамически регистрирует HTTP-модуль ASP.NET (IHttpModule), который в конечном итоге будет искать и пытаться вызвать класс запуска/создания приложения. И если это не удастся, кабламо!

Чтобы отключить автоматическое поведение, добавьте эту строку в файл web.config в <appSettings> разделе:

<add key="owin:AutomaticAppStartup " value="false" /> 

Более подробную информацию об этом поведении можно найти на сайте www.asp.net: http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection (так же, как упомянутый комментатор).

+0

Привет, Эйлон, я думаю, что начинаю понимать.Но теперь вопрос заключается в том, что вызывает упомянутый вами код (статический метод в классе PreApplicationStart) для выполнения. Еще до того, что вызывает загрузку этой сборки? Как я упоминал, кроме ссылок на проекты, я ничего не сделал для своего проекта. – VivekDev

+0

@ DumbDev см. Http://stackoverflow.com/questions/5955866/when-does-preapplicationstartmethod-actually-get-triggered-to-run? –

+0

Спасибо, Андреас. Довольно сложно. – VivekDev

 Смежные вопросы

  • Нет связанных вопросов^_^