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

时间:2012-06-17 17:55:59

标签: 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-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

是否存在某种解决方法,或者目前无法在Mono上主持MVC4?

我应该注意到,在Apache2上使用XSP4和mod_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)

5 个答案:

答案 0 :(得分:9)

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

长篇小说:在Mono 2.10.x发布时,微软还没有完全发布ASP.NET堆栈作为开源(Razor是仍然是封闭源代码的组件之一)。

最近微软终于开源了完整的堆栈,Mono将它包含在他们的树中,但这只发生在master分支中(只有Mono 2.11.x的预览版包含它)。此外,异步API尚未在Mono中实现(而MVC4依赖于它们),因此最好的选择是使用MVC3,现在使用Mono 3.0.1版本。

更长的故事:http://tirania.org/blog/archive/2012/Mar-28.html

答案 1 :(得分:3)

现在可以,并且在当前的单声道版本和使用NuGet时几乎是直截了当的。 MS在NuGet上放置MVC4的事实有所帮助。我已经为.Net 4& github https://github.com/chrisfcarroll/AspNetTemplatesForMono上的.Net 4.5。有几个陷阱,但它们在笔记中得到解决。

答案 2 :(得分: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 :(得分:0)

请按照以下链接成功在Mono上主持MVC 4应用程序。

http://www.bgsoftfactory.net/run-asp-net-mvc-4-with-mysql-on-linux/

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

答案 4 :(得分:0)

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