2012-06-17 18 views
10

Próbuję hostować projekt ASP.NET MVC4 RC na Mono 2.10.8.1. Otrzymuję następujący wyjątek, gdy dostęp do aplikacji po raz pierwszy:Jak skutecznie hostować ASP.NET MVC4 RC na 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 

Według http://www.mono-project.com/Compatibility ten powinien być realizowany w Mono 2.10.8. Microsoft wymienia właściwość jako .NET Framework 4.0: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.isenabled.aspx

Czy istnieje jakieś obejście problemu, czy też nie jest możliwe, aby w tym momencie hostować MVC4 na Mono?

Należy zauważyć, że dostaję ten problem zarówno podczas używania XSP4 i mod_mono na Apache2.

wersja Mono jest następujący:

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) 

Odpowiedz

9

TL/DR: Bieganie MVC4 pod Mono nadal nie zaleca się uruchomić MVC3 zamiast.

Długa historia: w momencie wydania Mono 2.10.x Microsoft nie wydał w pełni stosu ASP.NET jako open source (Razor był jednym z komponentów, który był nadal zamkniętym źródłem).

Niedawno firma Microsoft ostatecznie otworzyła pełny stos, a Mono umieścił go w drzewie, jednak stało się to tylko w gałęzi głównej (i tylko w wersji podglądu Mono 2.11.x to jest). Poza tym asynchroniczne interfejsy API nie są jeszcze zaimplementowane w Mono (i zależy od nich MVC4), więc najlepiej jest dla ciebie użyć MVC3, z wersją Mono 3.0.1.

Nawet już historia: http://tirania.org/blog/archive/2012/Mar-28.html

+1

Dzięki za odpowiedź. Na tej stronie znalazłem przyczynę wyjątku: http://go-mono.com/status/status.aspx?reference=4.0&profile=4.0&assembly=System.Web Po prostu jej nie zaimplementowano. –

+0

@knocte: Być może brakuje mi niektórych szczegółów, ale nie wierzę, że potrzebujesz .net 4.5 dla asp.net mvc 4, ponieważ nie zależy to od asynchronicznych API - przeczytaj więcej tutaj: http://stackoverflow.com/ pytania/9548283/can-i-deploy-my-asp-net-mvc-4-application-in-net-4/10463662 # 10463662 – corolla

+0

ok, może możesz celować w podzbiór MVC4, ale nie w cały MVC4? – knocte

1

Trzeba opracować nowy XSP tworzą źródła

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

Ta wersja potrzebuje wystarczającej ilości uprawnień do uruchamiania, sudo..., inaczej dostaniesz wiadomość System.IO.FileNotFoundException.

Następnie dodać te linie do pliku web.config

<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> 

Aby wyeliminować CS0234: The type or namespace name Helpers does not exist in the namespace System.Web. wyjątek.

Następnie wyjąć te zespoły z katalogu bin (jeżeli te są kopiowane forma na komputerze z systemem Windows)

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

To usunie Missing method System.Web.Security.FormsAuthentication::get_IsEnabled() wyjątek i wiele innych could not load type xyz wyjątki.

3

Jest to obecnie możliwe i jest prawie proste w przypadku aktualnego wydania mono i korzystania z NuGet. Fakt, że stwardnienie rozsiane położył rzeczy MVC4 na NuGet pomaga. Przygotowałem szablony robocze dla .Net 4 & .Net 4.5 na github https://github.com/chrisfcarroll/AspNetTemplatesForMono. Jest kilka kupków, ale są one adresowane w notatkach.

0

Usuń odniesienie do System.Web.Http i System.Web.Http.Host jeśli nie je (biblioteka WebAPI) potrzebują. Być może trzeba będzie usunąć WebApiConfig.cs w katalogu App_Start folder i odniesienia w Global.asax. Ale potem twój projekt będzie działał bez żadnych innych problemów.