Как успешно разместить ASP.NET MVC4 RC на Mono 2.10.8
Я пытаюсь разместить проект ASP.NET MVC4 RC поверх Mono 2.10.8.1. При первом обращении к приложению я получаю следующее исключение:
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 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)
Ответы
Ответ 1
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
Ответ 2
Теперь это возможно, и он почти прост в текущей моно-релизе и с использованием NuGet. Тот факт, что MS положил материал MVC4 на NuGet, помогает. Я разместил рабочие шаблоны для .Net 4 и .Net 4.5 на github https://github.com/chrisfcarroll/AspNetTemplatesForMono. Есть пара исправлений, но они адресованы в заметках.
Ответ 3
Вам нужно скомпилировать новую форму 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
.
Ответ 4
Следуйте приведенной ниже ссылке, чтобы успешно разместить приложение MVC 4 в Mono.
http://www.bgsoftfactory.net/run-asp-net-mvc-4-with-mysql-on-linux/
Он предоставляет пошаговую конфигурацию на сервере Linux.
Ответ 5
Удалите ссылку на System.Web.Http и System.Web.Http.Host, если они вам не нужны (библиотека WebApi).
Возможно, вам придется удалить WebApiConfig.cs в папку App_Start и ссылки в Global.asax.
Но после этого ваш проект будет работать без каких-либо других проблем.