Asp.net Visual Studio 2013项目是如何使其成为katana项目的?

Asp.net Visual Studio 2013项目是如何使其成为katana项目的?,asp.net,visual-studio-2013,owin,katana,Asp.net,Visual Studio 2013,Owin,Katana,我刚刚开始努力去理解奥文和卡塔纳。遵循 我在VS2013中创建了一个空白的asp.net项目,并向Microsoft.Owin.Host.SystemWeb添加了一个Nuget包引用。我创建的项目为空,如图所示 除了AssemblyInfo.cs、Web.config和packages.config之外,它不包含任何内容。现在当我运行(F5)这个时,它说 未找到包含OwinStartupAttribute的程序集 找不到包含Startup或[AssemblyName].Startup类的程序

我刚刚开始努力去理解奥文和卡塔纳。遵循 我在VS2013中创建了一个空白的asp.net项目,并向Microsoft.Owin.Host.SystemWeb添加了一个Nuget包引用。我创建的项目为空,如图所示

除了
AssemblyInfo.cs
Web.config
packages.config
之外,它不包含任何内容。现在当我运行(F5)这个时,它说

  • 未找到包含OwinStartupAttribute的程序集
  • 找不到包含Startup或[AssemblyName].Startup类的程序集。要禁用OWIN启动发现,请添加appSetting owin:web.config中的启动值为“false”。 要指定OWIN启动程序集、类或方法,请添加 appSetting owin:具有完全限定启动类的AppStartup或 web.config中的配置方法名称
现在的问题是,为什么仅仅通过添加对
Microsoft.Owin.Host.SystemWeb
的Nuget引用,它就开始寻找特定于Owin的东西,如
Startup
类等等,如错误消息所示? 我的意思是,我运行了一个不同的项目,没有Nuget引用,错误消息完全不同。通过添加Nuget引用,至少在两个文件
AssemblyInfo.cs
Web.config
中似乎没有任何更改。据我所知,添加Nuget添加了一个packages.config文件,并添加了一些项目引用。此外,我已经比较了两个项目的标签页的项目属性,我没有发现任何差异!
所以我想知道到底是什么原因导致Owin项目寻找一个启动类?

秘密在于Katana使用了一个名为PreAppStart的ASP.NET功能。您可以在此处看到源代码:

如果ASP.NET应用程序中的程序集具有此程序集级别属性:

[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "Initialize")]
然后ASP.NET将在应用程序启动时自动运行该代码。此代码将在“用户”代码运行之前运行,甚至在
应用程序启动
事件之前。这就是为什么它被称为PreAppStart

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


要禁用自动行为,请将这一行添加到
中的web.config(与前面提到的注释者相同)。

嗨,Eilon,我想我开始理解了。但现在的问题是,是什么导致您提到的代码(PreApplicationStart类中的静态方法)执行。在此之前,是什么导致该程序集加载?正如我提到的,除了项目参考,我没有对我的项目做任何事情。@DumbDev看到了吗?谢谢Andreas。相当复杂。我刚刚意识到这与“是什么过程让IIS开始通过Owin管道响应请求?”()@DumbDev这确实是基本相同的问题和答案。
<add key="owin:AutomaticAppStartup " value="false" />