2012-06-17 6 views
10

Я пытаюсь разместить проект ASP.NET MVC4 RC поверх Mono 2.10.8.1. Я получаю следующее исключение, когда я получить доступ к приложению в первый раз:Как успешно разместить ASP.NET MVC4 RC на 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 

http://www.mono-project.com/Compatibility Согласно этому должен быть реализован в Mono 2.10.8. Microsoft перечисляет это свойство как .NET Framework 4.0: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.isenabled.aspx

Есть ли какая-нибудь работа, или просто невозможно разместить MVC4 на Mono в это время?

Следует отметить, что я получаю эту проблему как при использовании XSP4, так и mod_mono на Apache2.

Mono версия выглядит следующим образом:

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) 

ответ

9

TL/DR: Запуск MVC4 под Mono еще не рекомендуется, запустить MVC3 вместо этого.

Длинная история: в то время, когда был выпущен Mono 2.10.x, Microsoft не полностью выпустила стек ASP.NET как открытый источник (Razor был одним из компонентов, который был все еще закрытым источником).

Недавно Microsoft наконец-то открыла полный стек, а Mono включила его в свое дерево, однако это произошло только в мастер-ветке (и только в превью версии Mono 2.11.x). Кроме того, асинхронные API еще не реализованы в Mono (и MVC4 зависит от них), поэтому лучшим вариантом для вас является использование MVC3 на данный момент с версией Mono 3.0.1.

Даже длинная история: http://tirania.org/blog/archive/2012/Mar-28.html

+1

Спасибо за ответ. Я нашел причину исключения на этой странице: http://go-mono.com/status/status.aspx?reference=4.0&profile=4.0&assembly=System.Web Они просто не реализовали его. –

+0

@knocte: Возможно, мне не хватает некоторых деталей, но я не думаю, что вам нужно .net 4.5 для asp.net mvc 4, так как это не зависит от асинхронных API - читайте здесь: http://stackoverflow.com/ Вопросы/9548283/can-i-deploy-my-asp-net-mvc-4-application-in-net-4/10463662 # 10463662 – corolla

+0

хорошо, может быть, вы можете настроить подмножество MVC4, но не весь MVC4? – knocte

1

Вы должны скомпилировать новый XSP образуют источники

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

Эта версия нуждается достаточно разрешения на запуск, sudo..., в противном случае вы получите сообщение System.IO.FileNotFoundException.

Затем добавьте эти строки в файл 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> 

Для устранения CS0234: The type or namespace name Helpers does not exist in the namespace System.Web. исключения.

Затем удалите эти сборки из папки BIN (если таковые будут скопированы формой машины Windows,)

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

Это удалит Missing method System.Web.Security.FormsAuthentication::get_IsEnabled() исключения и многое других could not load type xyz исключения.

3

В настоящее время это возможно, и он почти прост в текущей моноблокировке и с использованием NuGet. Тот факт, что MS положил материал MVC4 на NuGet, помогает. Я разместил рабочие шаблоны для .Net 4 & .Net 4.5 на github https://github.com/chrisfcarroll/AspNetTemplatesForMono. Есть пара исправлений, но они адресованы в заметках.

0

Удалить ссылку на System.Web.Http и System.Web.Http.Host если не их (библиотека WebAPI) необходимо. Возможно, вам потребуется удалить WebApiConfig.cs в папку App_Start и ссылки в Global.asax. Но после этого ваш проект будет работать без каких-либо других проблем.