2014-09-23 28 views
6

Tôi mới bắt đầu cuộc đấu tranh để hiểu về owin và katana. Theo dõi Asp.Net tutorial Tôi đã tạo một dự án asp.net trống trong VS2013 và thêm tham chiếu Gói Nuget vào Microsoft.Owin.Host.SystemWeb. Dự án tôi tạo ra là trống rỗng như được hiển thị.Dự án Visual Studio 2013 làm cho nó thành một dự án katana là gì?

enter image description here

này chứa gì ngoài AssemblyInfo.cs, Web.configpackages.config. Bây giờ khi tôi chạy (F5) này, nó nói

  • Không lắp ráp tìm thấy có chứa một OwinStartupAttribute.
  • Không tìm thấy lắp ráp nào chứa Startup hoặc [AssemblyName] .Startup class. Để tắt tính năng phát hiện khởi động OWIN, hãy thêm appSetting owin: AutomaticAppStartup với giá trị "false" trong web.config của bạn. Để chỉ định Hội đồng, Lớp hoặc Phương thức khởi động OWIN, hãy thêm ứng dụng Đặt lại nợ: AppStartup với lớp khởi động đủ điều kiện hoặc tên phương thức cấu hình trong web.config của bạn.

Bây giờ câu hỏi là làm thế nào mà chỉ bằng cách thêm một tham chiếu NuGet để Microsoft.Owin.Host.SystemWeb, nó bắt đầu tìm kiếm một cái gì đó cụ thể để Owin như Startup lớp và vân vân như đã nêu trong thông báo lỗi? Tôi có nghĩa là tôi đã chạy một dự án khác mà không có tham chiếu Nuget đó và thông báo lỗi hoàn toàn khác. Không có gì thay đổi ít nhất trong hai tệp AssemblyInfo.cs, Web.config bằng cách thêm tham chiếu Nuget. Khi tôi hiểu thêm Nuget đã thêm một tệp packages.config và thêm một số tham chiếu dự án. Ngoài ra tôi đã so sánh các thuộc tính dự án cho hai tab dự án theo tab và tôi không tìm thấy bất kỳ sự khác biệt nào! Vì vậy, tôi tự hỏi điều gì trên thế giới đang khiến dự án Owin tìm kiếm một lớp Khởi động?

+0

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

Trả lời

4

Bí mật là Katana sử dụng tính năng ASP.NET có tên PreAppStart. Bạn có thể xem mã nguồn ở đây:

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

Nếu một assembly trong một ứng dụng ASP.NET có lắp ráp cấp này thuộc tính:

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

Sau đó ASP.NET sẽ tự động chạy mà mã như ứng dụng bắt đầu. Mã này sẽ chạy trước khi mã "người dùng" sẽ chạy, trước cả sự kiện Application_Start. Đó là lý do tại sao nó được gọi là PreAppStart.

Trong trường hợp của Katana, mã này đăng ký động một Mô-đun HTTP HTTP (IHttpModule) mà cuối cùng sẽ tìm kiếm và cố gắng gọi lớp khởi động/trình xây dựng của ứng dụng. Và nếu điều đó thất bại, kablamo!

Để vô hiệu hóa hành vi tự động, thêm dòng này vào web.config trong <appSettings> phần:

<add key="owin:AutomaticAppStartup " value="false" /> 

Thông tin thêm về hành vi này có thể được tìm thấy trên trang web www.asp.net: http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection (giống như người bình luận được đề cập).

+0

Xin chào Eilon, tôi nghĩ tôi bắt đầu hiểu.Nhưng bây giờ câu hỏi là những gì đang gây ra mã mà bạn đã đề cập (phương thức tĩnh trong lớp PreApplicationStart) để thực hiện. Ngay cả trước đó những gì đang gây ra hội đồng đó để tải? Như tôi đã đề cập, ngoại trừ tài liệu tham khảo dự án, tôi đã không thực hiện bất kỳ điều gì cho dự án của mình. – VivekDev

+0

@DumbDev xem http://stackoverflow.com/questions/5955866/when-does-preapplicationstartmethod-actually-get-triggered-to-run? –

+0

Cảm ơn Andreas. Hợp lý phức tạp. – VivekDev

Các vấn đề liên quan