如何在Mono 2.10.8上成功托管ASP.NET MVC4 RC

如何在Mono 2.10.8上成功托管ASP.NET MVC4 RC,mono,asp.net-mvc-4,mod-mono,xsp4,Mono,Asp.net Mvc 4,Mod Mono,Xsp4,我正试图在Mono 2.10.8.1上主持一个ASP.NET MVC4 RC项目。我第一次访问应用程序时遇到以下异常: 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-te

我正试图在Mono 2.10.8.1上主持一个ASP.NET MVC4 RC项目。我第一次访问应用程序时遇到以下异常:

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
根据这一点,应该在Mono 2.10.8中实现。Microsoft将该属性列为.NET Framework 4.0:

是否有某种解决办法,或者目前无法在Mono上托管MVC4

我应该注意到,我在Apache2上使用XSP4和mod_mono时都遇到了这个问题

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)

TL/DR:仍然不建议在Mono下运行MVC4,而是运行MVC3

说来话长:在Mono 2.10.x发布时,微软还没有完全将ASP.NET堆栈作为开放源代码发布(Razor是其中一个仍然是封闭源代码的组件)

最近,微软终于公开了整个堆栈,Mono已经将其包含在他们的树中,然而这只发生在master branch中(并且只有Mono 2.11.x的预览版本才包括它)。此外,异步API还没有在Mono中实现(MVC4依赖于它们),所以现在最好使用MVC3,使用Mono 3.0.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>

这将删除缺少的
方法System.Web.Security.FormsAuthentication::get_IsEnabled()
异常和许多其他
无法加载类型xyz
异常。

现在这是可能的,在当前mono版本和使用NuGet上几乎是简单的。事实上,微软已经把MVC4的东西放在NuGet上了。我已经将.NET4和.NET4.5的工作模板放在github上。这里有几个问题,但它们在注释中有说明。

请按照下面的链接在Mono上成功地托管MVC4应用程序


它在Linux服务器上提供分步配置。

删除对System.Web.HttpSystem.Web.Http.Host的引用(如果不需要)(WebApi库)。 您可能需要删除App_Start文件夹中的WebApiConfig.cs和Global.asax中的引用。
但在这之后,您的项目将不会出现任何其他问题。

谢谢您的回答。我在这个页面上找到了异常的原因:他们根本没有实现它。@knocte:我可能遗漏了一些细节,但我不认为asp.net mvc 4需要.net 4.5,因为它不依赖于异步API-请阅读这里的更多内容:好的,也许你可以针对MVC4的一个子集,而不是整个MVC4?
Microsoft.Web.Infrastructure.dll
System.Net.Http.dll
System.Net.Http.Formatting.dll
System.Web.Http.dll
System.Web.Http.WebHost.dll