我刚开始努力去理解owin和katana。在Asp.Net tutorial之后
我在VS2013中创建了一个空白的asp.net项目,并向Microsoft.Owin.Host.SystemWeb
添加了一个Nuget Package引用。我创建的项目如图所示为空白。
除AssemblyInfo.cs
,Web.config
和packages.config
外,其他内容均不包含任何内容。现在当我跑(F5)时,它说
- 找不到包含OwinStartupAttribute的程序集。
- 找不到包含Startup或[AssemblyName] .Startup类的程序集。要禁用OWIN启动发现,请添加appSetting owin:AutomaticAppStartup,其值为" false"在你的web.config中。 要指定OWIN启动程序集,类或方法,请添加 appSetting owin:AppStartup与完全限定的启动类或 web.config中的配置方法名称。
现在问题是如何通过向Microsoft.Owin.Host.SystemWeb
添加Nuget引用,它开始寻找像Startup
类那样的Owin特有的东西,如错误信息中所示?
我的意思是我运行了一个没有Nuget引用的不同项目,错误信息完全不同。通过添加Nuget引用,至少在两个文件AssemblyInfo.cs
,Web.config
中似乎没有任何变化。据我所知,添加Nuget添加了一个packages.config文件并添加了一些项目引用。此外,我还通过选项卡比较了两个项目选项卡的项目属性,但我没有发现任何差异!
所以我想知道世界上是什么导致Owin项目寻找Startup类?
答案 0 :(得分:4)
秘密在于Katana使用名为PreAppStart的ASP.NET功能。您可以在此处查看源代码:
如果ASP.NET应用程序中的程序集具有此程序集级属性:
[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "Initialize")]
然后,ASP.NET将在应用程序启动时自动运行该代码。此代码将在“用户”代码运行之前运行,甚至在Application_Start
事件之前运行。这就是为什么它被称为PreAppStart。
对于Katana,此代码动态注册ASP.NET HTTP模块(IHttpModule
),该模块最终将搜索并尝试调用应用程序的启动/构建器类。如果失败了,卡布拉莫!
要禁用自动行为,请将此行添加到<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(与提及的评论者相同)。