Tôi đang làm việc trên một trang web thương mại điện tử sử dụng Asp.Net 5 và MVC6 sau Kiến trúc Onion (OA) để chúng ta có khớp nối lỏng lẻo giữa các lớp. Tôi cũng muốn decouple Startup code trong hội đồng của riêng mình thay vì có nó trong dự án MVC.Asp.Net 5 MVC 6 Startup.cs Phân tách hội trong Beta8
Trong bản beta7 Rất dễ di chuyển Startup.cs vào thư viện lớp (Bootstrapper) như được giải thích here. Một thực tế thú vị bằng cách sử dụng cách tiếp cận được đề cập là tôi không phải tham khảo assembly Bootstrapper từ dự án MVC. Khi chạy, lưu trữ dưới IISExpress, thông qua quá trình quét hội đồng, nó có thể tìm thấy hội đồng Bootstrapper được đề cập trong tệp Microsoft.AspNet.Hosting.ini. Đây là có thể bằng cách xác định vị trí trong global.json
{
"projects": [ "Source/Projects","Source/Bootstrapper" ],
"sdk": {
"architecture": "x64",
"runtime": "clr",
"version": "1.0.0-beta7"
}
}
Dự án Bootstrapper sẽ có tài liệu tham khảo cho tất cả các dự án khác như cơ sở hạ tầng, dịch vụ vv để treo lên Dependency Injection.
Lý do không tham chiếu dự án Bootstrapper trong dự án MVC, tuân theo quy tắc Kiến trúc Onion, là tránh truy cập vào mã cơ sở hạ tầng trực tiếp từ dự án MVC. Vì vậy, đây là tất cả làm việc tốt cho đến khi tôi nâng cấp lên Beta8 sáng nay.
Như mô hình lưu trữ được thay đổi từ IIS để Kestrel, tôi phải cấu trúc lại các tập tin global.json và project.json như sau
global.json
{
"projects": [ "Source/Projects","Source/Bootstrapper" ],
"sdk": {
"architecture": "x64",
"runtime": "clr",
"version": "1.0.0-beta8"
}
}
project.json
{
"dependencies": {
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-beta8",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-beta8",
"....",
"....",
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
}
}
Sau khi thực hiện các thay đổi ở trên, tôi bắt đầu nhận được lỗi sau bất kể tôi chạy nó sử dụng lệnh DNX hoặc trực tiếp thông qua Visual Studio
Internal Server Error System.InvalidOperationException Một loại tên 'StartupDevelopment' hoặc 'Khởi động' không thể được tìm thấy trong lắp ráp 'EcommerceMvcApp'. tại Microsoft.AspNet.Hosting.Startup.StartupLoader.FindStartupType (String startupAssemblyName, IList diagnosticMessages) tại Microsoft.AspNet.Hosting.Internal.HostingEngine.EnsureStartup() tại Microsoft.AspNet.Hosting.Internal.HostingEngine.EnsureApplicationServices () tại Microsoft.AspNet.Hosting.Internal.HostingEngine.BuildApplication()
Hóa ra rằng tôi có để xác định tập tin cấu hình hoặc tranh cãi inline để lệnh web như được giải thích here. Sau khi làm theo các gợi ý, tôi đã cố gắng chạy ứng dụng và thời gian này, tôi bắt đầu nhận được các lỗi dưới đây
System.IO.FileNotFoundException Không thể tải tập tin hoặc lắp ráp 'Bootstrapper' hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy tệp được chỉ định. tại System.Reflection.RuntimeAssembly._nLoad (AssemblyName fileName, String codebase, Bằng chứng assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) tại System.Reflection.RuntimeAssembly.nLoad (AssemblyName fileName, String codebase , Bằng chứng assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) tại System.Reflection.RuntimeAssembly.InternalLoadAssemblyName (AssemblyName assemblyRef, Bằng chứng assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) tại System.Reflection.Assembly.Load (AssemblyName assemblyRef) tại Microsoft.AspNet.Hosting.Startup .StartupLoader.FindStartupType (string startupAssemblyName, IList diagnosticMessages) tại Microsoft.AspNet.Hosting.Internal.HostingEngine.EnsureStartup() tại Microsoft.AspNet.Hosting.Internal.HostingEngine.EnsureApplicationServices() tại Microsoft.AspNet.Hosting. Internal.HostingEngine.BuildApplication()
solution yêu cầu tôi thêm tham chiếu vào dự án Bootstrapper trong dự án MVC và nó hoạt động. Tuy nhiên, nó đánh bại mục đích có một hội đồng Bootstrapper riêng biệt ngay từ đầu.
Câu hỏi đặt ra là tại sao nó không thể tìm thấy tổ hợp Bootstrapper như được sử dụng trong Beta7, sử dụng các nguồn được chỉ định trong "dự án" trong global.json hoặc là mô hình lưu trữ mới bỏ qua global.json? Có cách nào để xác định vị trí của hội đồng khởi động?
Cập nhật 1
Chỉ muốn nhấn mạnh rằng trong Beta7 nó cũng làm việc sử dụng "lệnh DNX" cho cả hai Microsoft.AspNet.Server.WebListener và Microsoft.AspNet.Server.Kestrel.
"commands": {
"kestrel": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:5004 --config wwwroot/Microsoft.AspNet.Hosting.ini",
"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5004 --config wwwroot/Microsoft.AspNet.Hosting.ini"
}
Tuy nhiên, lệnh dnx (sử dụng tệp Microsoft.AspNet.Hosting.json) không thành công cho cả hai máy chủ trong Beta8. Nếu ai đó đang tự hỏi rằng đó là một cái gì đó để làm với thành phần IIS Helios trong Beta7, nó không phải là trường hợp. Tôi đang bối rối như tại sao tra cứu lắp ráp ngừng làm việc trong beta8
Cập nhật 2
Đây là vết đống mà tôi nhận được khi tôi cố gắng chạy trong beta8 sử dụng IISExpress. Dường như nó đang cố gắng để tìm lắp ráp trong thư mục bin dnx.
System.IO.FileNotFoundException: Không thể tải tệp hoặc lắp ráp 'Bootstrapper' hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy tệp được chỉ định. Tên tệp: 'Bootstrapper' tại System.Reflection.RuntimeAssembly._nLoad (AssemblyName fileName, String codebase, Bằng chứng assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) tại System.Reflection.RuntimeAssembly.nLoad (AssemblyName fileName, String codebase , Bằng chứng assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) tại System.Reflection.RuntimeAssembly.InternalLoadAssemblyName (AssemblyName assemblyRef, Bằng chứng assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) tại System.Reflection.Assembly.Load (AssemblyName assemblyRef) tại Microsoft.AspNet.Hosting.Startup .StartupLoader.FindStartupType (string startupAssemblyName, IList`1 diagnosticMessages) tại Microsoft.AspNet.Hosting.Internal.HostingEngine.EnsureStartup() tại Microsoft.AspNet.Hosting.Internal.HostingEngine.EnsureApplicationServices() tại Microsoft.AspNet. Hosting.Internal.HostingEngine.BuildApplication()
=== Thông tin trạng thái liên kết trước === LOG: DisplayName = Bootstrapper (một phần) WRN: Thông tin liên kết một phần được cung cấp cho một assembly : WRN: Tên lắp ráp: Bootstrapper | ID tên miền: 1 WRN: A liên kết một phần xảy ra khi chỉ một phần tên hiển thị lắp ráp là được cung cấp. WRN: Điều này có thể dẫn đến việc chất kết dính tải lắp ráp không chính xác. WRN: Chúng tôi khuyên bạn nên cung cấp thông tin nhận dạng văn bản đầy đủ được chỉ định cho hội đồng, WRN: bao gồm tên đơn giản, phiên bản, văn hóa và mã thông báo khóa công cộng. WRN: Xem báo cáo chính thức http://go.microsoft.com/fwlink/?LinkId=109270 để biết thêm thông tin và các giải pháp phổ biến cho vấn đề này. LOG: Appbase = tệp: /// C: /Users/sshassan/.dnx/runtimes/dnx-clr-win-x86.1.0.0-beta8/bin/ LOG: Initial PrivatePath = NULL Gọi điện thoại: (Không xác định). === LOG: Ràng buộc này bắt đầu trong ngữ cảnh tải mặc định. LOG: Không tìm thấy tệp cấu hình ứng dụng nào. LOG: Sử dụng tệp cấu hình máy chủ lưu trữ: LOG: Sử dụng tệp cấu hình máy từ C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config. LOG: Chính sách không được áp dụng cho tham chiếu tại thời điểm này (riêng tư, liên kết lắp ráp tùy chỉnh, một phần hoặc dựa trên vị trí). LOG: Đang cố gắng tải xuống URL mới tệp: /// C: /Users/sshassan/.dnx/runtimes/dnx-clr-win-x86.1.0.0-beta8/bin/Bootstrapper.DLL. LOG: Đang cố tải xuống URL mới tệp: /// C: /Users/sshassan/.dnx/runtimes/dnx-clr-win-x86.1.0.0-beta8/bin/Bootstrapper/Bootstrapper.DLL. LOG: Đang cố tải xuống URL mới tệp: /// C: /Users/sshassan/.dnx/runtimes/dnx-clr-win-x86.1.0.0-beta8/bin/Bootstrapper.EXE. LOG: Đang cố tải xuống URL mới tệp: /// C: /Users/sshassan/.dnx/runtimes/dnx-clr-win-x86.1.0.0-beta8/bin/Bootstrapper/Bootstrapper.EXE.
Có lẽ, nếu tôi chạy DNU xuất bản và lưu trữ nó dưới IIS nó sẽ làm việc, nhưng điều đó có nghĩa là tôi sẽ phải phát hành nó mỗi khi tôi thực hiện thay đổi
Bạn thực sự nên thực hiện điều này với [kho lưu trữ aspnet/Home] (https://github.com/aspnet/Home/) ans yêu cầu hỗ trợ tại đó. – poke
Bạn có thể đạt được nó? Bây giờ RC1 đã được phát hành, có lẽ nó dễ dàng hơn. – Franco
Tôi chưa thử. Tôi nghĩ rằng với điểm vào mới trong tập tin khởi động tức là phương pháp chính nó có thể là có thể. Tôi sẽ cung cấp cho nó một đi –