2012-06-17 21 views
10

Tôi đang cố gắng để lưu trữ một dự án ASP.NET MVC4 RC trên đầu trang của Mono 2.10.8.1. Tôi nhận được ngoại lệ sau khi tôi truy cập ứng dụng lần đầu tiên:Làm thế nào để lưu trữ thành công ASP.NET MVC4 RC trên Mono 2.10.8

Missing method System.Web.Security.FormsAuthentication::get_IsEnabled() in assembly /usr/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll, referenced in assembly /tmp/root-temp-aspnet-0/eaee30a1/assembly/shadow/5cf10065/40974e7d_1c664e18_00000001/System.Web.Http.WebHost.dll 

Theo http://www.mono-project.com/Compatibility điều này nên được triển khai trong Mono 2.10.8. Microsoft liệt kê thuộc tính dưới dạng .NET Framework 4.0: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.isenabled.aspx

Có một loại công việc nào đó hay chỉ là không thể lưu trữ MVC4 trên Mono tại thời điểm này?

Tôi nên lưu ý rằng tôi gặp sự cố này khi sử dụng XSP4 và mod_mono trên Apache2.

phiên bản Mono là như sau:

Mono JIT compiler version 2.10.8.1 (Debian 2.10.8.1-1~dhx1~lucid1) 
Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com 
     TLS:   __thread 
     SIGSEGV:  altstack 
     Notifications: epoll 
     Architecture: x86 
     Disabled:  none 
     Misc:   softdebug 
     LLVM:   supported, not enabled. 
     GC:   Included Boehm (with typed GC and Parallel Mark) 

Trả lời

9

TL/DR: Chạy MVC4 dưới Mono vẫn không được khuyến khích, chạy MVC3 để thay thế.

Câu chuyện dài: tại thời điểm Mono 2.10.x được phát hành, Microsoft đã không phát hành đầy đủ ASP.NET stack như nguồn mở (Razor là một trong những thành phần vẫn là nguồn đóng).

Gần đây Microsoft cuối cùng đã mở toàn bộ ngăn xếp và Mono đã đưa nó vào cây của họ, tuy nhiên điều này đã xảy ra chỉ trong nhánh chính (và chỉ các phiên bản xem trước của Mono 2.11.x bao gồm nó). Bên cạnh đó, các API async chưa được thực hiện trong Mono (và MVC4 phụ thuộc vào chúng), vì vậy, đặt cược tốt nhất cho bạn là sử dụng MVC3 ngay bây giờ, với phiên bản Mono 3.0.1.

Thậm chí còn câu chuyện: http://tirania.org/blog/archive/2012/Mar-28.html

+1

Cảm ơn câu trả lời. Tôi tìm thấy lý do ngoại lệ tại trang này: http://go-mono.com/status/status.aspx?reference=4.0&profile=4.0&assembly=System.Web Họ chỉ đơn giản là không triển khai nó. –

+0

@knocte: Tôi có thể thiếu một số chi tiết, nhưng tôi không tin bạn cần .net 4.5 cho asp.net mvc 4, vì nó không phụ thuộc vào các API không đồng bộ - đọc thêm tại đây: http://stackoverflow.com/ câu hỏi/9548283/can-i-deploy-my-asp-net-mvc-4-application-in-net-4/10463662 # 10463662 – corolla

+0

ok, có thể bạn có thể nhắm mục tiêu một tập hợp con của MVC4, nhưng không phải toàn bộ MVC4? – knocte

1

Bạn cần phải biên dịch XSP mới hình thành nguồn

git clone git://github.com/mono/xsp.git 
cd xsp 
./autogen.sh --prefix=/opt 
make 
sudo make install 

Phiên bản này cần đủ quyền để chạy, sudo..., nếu không bạn sẽ nhận được thông báo System.IO.FileNotFoundException.

Sau đó, thêm những dòng sau vào tệp web.config của bạn

<system.web> 
    <compilation debug="true" targetFramework="4.0"> 
     <assemblies> 
     <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />   
     <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />   
     </assemblies> 
    </compilation> 

Để loại bỏ CS0234: The type or namespace name Helpers does not exist in the namespace System.Web. ngoại lệ.

Sau đó, loại bỏ những cụm từ thư mục bin của bạn (nếu những được sao chép dưới dạng các máy tính Windows)

Microsoft.Web.Infrastructure.dll 
System.Net.Http.dll 
System.Net.Http.Formatting.dll 
System.Web.Http.dll 
System.Web.Http.WebHost.dll 

này sẽ loại bỏ Missing method System.Web.Security.FormsAuthentication::get_IsEnabled() ngoại lệ và nhiều could not load type xyz ngoại lệ khác.

3

Giờ đây có thể, và gần như đơn giản trong bản phát hành đơn hiện tại và sử dụng NuGet. Thực tế là MS đã đặt công cụ MVC4 trên NuGet giúp. Tôi đã đặt mẫu làm việc cho .Net 4 & .Net 4.5 trên github https://github.com/chrisfcarroll/AspNetTemplatesForMono. Có một vài gotchas, nhưng chúng được đề cập trong ghi chú.

0

Remove tham chiếu đến System.Web.HttpSystem.Web.Http.Host nếu bạn không cần đến chúng (thư viện WebAPI). Bạn có thể cần xóa WebApiConfig.cs trong thư mục App_Start và các tham chiếu trong Global.asax. Nhưng sau đó dự án của bạn sẽ hoạt động mà không có bất kỳ vấn đề nào khác.

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