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

Viv*_*Dev 6 asp.net owin katana visual-studio-2013

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

在此输入图像描述

这包含什么,除了AssemblyInfo.cs,Web.configpackages.config.现在当我跑(F5)时,它说

  • 找不到包含OwinStartupAttribute的程序集.
  • 找不到包含Startup或[AssemblyName] .Startup类的程序集.要禁用OWIN启动发现,请在web.config中添加值为"false"的appSetting owin:AutomaticAppStartup.要指定OWIN启动程序集,类或方法,请在web.config中添加appSetting owin:AppStartup以及完全限定的启动类或配置方法名称.

现在问题是如何通过添加一个Nuget引用Microsoft.Owin.Host.SystemWeb,它开始寻找像Owin一样特有的东西Startup,如错误消息中所示的那样?我的意思是我运行了一个没有Nuget引用的不同项目,错误信息完全不同.没有什么似乎至少在两个文件改变AssemblyInfo.cs,Web.config通过添加的NuGet参考.据我所知,添加Nuget添加了一个packages.config文件并添加了一些项目引用.此外,我还通过选项卡比较了两个项目选项卡的项目属性,但我没有发现任何差异!所以我想知道世界上是什么导致Owin项目寻找Startup类?

Eil*_*lon 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")]
Run Code Online (Sandbox Code Playgroud)

然后 ASP.NET 将在应用程序启动时自动运行该代码。该代码将在“用户”代码运行之前运行,甚至在Application_Start事件之前运行。这就是它被称为 PreAppStart 的原因。

对于 Katana,此代码动态注册一个 ASP.NET HTTP 模块 ( IHttpModule),该模块最终将搜索并尝试调用应用程序的启动/构建器类。如果失败了,kablamo!

要禁用自动行为,请将此行添加到 web.config 的以下<appSettings>部分:

<add key="owin:AutomaticAppStartup " value="false" />
Run Code Online (Sandbox Code Playgroud)

有关此行为的更多信息可以在 www.asp.net 站点上找到:http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection(与评论者提到的相同) )。