2014-09-23 6 views
6

나는 오우 인과 카타나를 이해하기위한 투쟁에 착수했다. Asp.Net tutorial 다음은 VS2013에 빈 asp.net 프로젝트를 만들고 Microsoft.Owin.Host.SystemWeb에 대한 Nuget Package 참조를 추가했습니다. 내가 만든 프로젝트는 그림과 같이 공백입니다.Visual Studio 2013 프로젝트로 katana 프로젝트는 무엇이됩니까?

enter image description here

이것은 AssemblyInfo.cs, Web.configpackages.config 제외하고는 아무 것도 포함되어 있지 않습니다. 내가 실행할 때 이제 (F5)이은, 그것은 OwinStartupAttribute을 포함 발견

  • 어떤 어셈블리는 말한다.
  • Startup 또는 [AssemblyName] .Startup 클래스가 포함 된 어셈블리를 찾을 수 없습니다. OWIN 시작 검색을 사용하지 않도록 설정하려면 web.config에 appSetting owin : AutomaticAppStartup 값을 "false"로 추가하십시오. 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

http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection –

답변

4

비밀은 Kappana가 PreAppStart라는 ASP.NET 기능을 사용한다는 것입니다.

[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "Initialize")] 

그런 다음 ASP.NET이 자동으로 그 코드를 실행합니다 :하는 ASP.NET 응용 프로그램에서 어셈블리는이 어셈블리 레벨 속성이있는 경우

https://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Host.SystemWeb/PreApplicationStart.cs

: 당신은 소스 여기에 코드를 볼 수 있습니다 앱이 시작됩니다. 이 코드는 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 (동일 댓글 작성자).

+0

안녕하세요 Eilon, 나는 이해하기 시작했다고 생각합니다.하지만 이제 문제는 앞서 언급 한 코드 (PreApplicationStart 클래스의 정적 메서드)가 실행되도록하는 것입니다. 그 전에도 어셈블리가로드되는 원인이 무엇입니까? 프로젝트 참고서를 제외하고 언급했듯이 프로젝트에는 아무 것도하지 않았습니다. – VivekDev

+0

@DumbDev http://stackoverflow.com/questions/5955866/when-does-preapplicationstartmethod-actually-get-triggered-to-run을 참조하십시오. –

+0

감사합니다. Andreas. 합리적으로 복잡합니다. – VivekDev