Visual Studio 2013项目是什么使它成为katana项目?

时间:2014-09-23 05:21:28

标签: asp.net visual-studio-2013 owin katana

我刚开始努力去理解owin和katana。在Asp.Net tutorial之后 我在VS2013中创建了一个空白的asp.net项目,并向Microsoft.Owin.Host.SystemWeb添加了一个Nuget Package引用。我创建的项目如图所示为空白。

enter image description here

AssemblyInfo.csWeb.configpackages.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.csWeb.config中似乎没有任何变化。据我所知,添加Nuget添加了一个packages.config文件并添加了一些项目引用。此外,我还通过选项卡比较了两个项目选项卡的项目属性,但我没有发现任何差异! 所以我想知道世界上是什么导致Owin项目寻找Startup类?

1 个答案:

答案 0 :(得分: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),该模块最终将搜索并尝试调用应用程序的启动/构建器类。如果失败了,卡布拉莫!

要禁用自动行为,请将此行添加到<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(与提及的评论者相同)。