2014-09-23 81 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

相关问题