2014-09-23 80 views
6

我剛開始努力瞭解owin和katana。在Asp.Net tutorial 之後,我在VS2013中創建了一個空白的asp.net項目並添加了一個對Microsoft.Owin.Host.SystemWeb的Nuget包引用。如圖所示,我創建的項目是空白的。什麼是Visual Studio 2013項目使其成爲一個katana項目?

enter image description here

這包含了什麼,除了AssemblyInfo.csWeb.configpackages.config。現在,當我運行(F5)這一點,它說含有OwinStartupAttribute發現

  • 沒有裝配。
  • 找不到包含啓動或[AssemblyName] .Startup類的程序集。要禁用OWIN啓動發現,請在web.config中將appSetting owin:AutomaticAppStartup的值設置爲「false」。 要指定OWIN啓動程序集,類或方法,請在您的web.config中將具有完全限定啓動類或 配置方法名稱的appSetting owin:AppStartup添加到 。

現在的問題是如何通過增加的NuGet參考Microsoft.Owin.Host.SystemWeb剛剛問世,就開始尋找一些具體的事情來Owin像Startup類等爲錯誤消息指出? 我的意思是我沒有那個Nuget引用運行了一個不同的項目和錯誤信息是完全不同的。至少在兩個文件AssemblyInfo.csWeb.config中通過添加Nuget引用似乎沒有任何變化。據我瞭解,添加Nuget添加了一個packages.config文件並添加了一些項目引用。此外,我已經比較了兩個項目的選項卡的項目屬性,我沒有發現任何區別! 所以我想知道世界上究竟是什麼導致Owin項目尋找一個Startup類?

+0

http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection – 2014-09-23 05:24:02

回答

4

祕訣是Katana使用名爲PreAppStart的ASP.NET功能。你可以看到源代碼在這裏:

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。

對於Katana,此代碼動態註冊一個ASP.NET HTTP模塊(IHttpModule),最終將搜索並嘗試調用應用程序的啓動/構建器類。如果失敗了,kablamo!

要禁用自動行爲,這條線在<appSettings>節添加到web.config中:

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

此行爲的更多信息可以在www.asp.net網站上找到:http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection(同提到的評論者)。

+0

嗨Eilon,我想我開始明白了。但現在問題是什麼導致您提到的代碼(PreApplicationStart類中的靜態方法)執行。甚至在此之前,什麼導致該組件加載?正如我所提到的,除了項目引用之外,我還沒有對我的項目做過任何事情。 – VivekDev 2014-09-23 06:34:35

+0

@DDevDev請參閱http://stackoverflow.com/questions/5955866/when-does-preapplicationstartmethod-actually-get-triggered-to-run? – 2014-09-23 07:13:25

+0

謝謝安德烈亞斯。相當複雜。 – VivekDev 2014-09-23 07:41:23

相關問題