10

我正在尝试在 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)
4

5 回答 5

9

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

长话短说:在 Mono 2.10.x 发布时,Microsoft 尚未将 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

于 2012-06-18T15:06:09.780 回答
3

现在是可能的,并且在当前的单声道版本和使用 NuGet 上几乎是简单的。MS 已将 MVC4 内容放在 NuGet 上的事实有所帮助。我已将 .Net 4 和 .Net 4.5 的工作模板放在 github https://github.com/chrisfcarroll/AspNetTemplatesForMono上。有几个陷阱,但它们在注释中得到解决。

于 2014-01-14T09:00:39.623 回答
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异常。

于 2013-09-22T20:49:55.913 回答
0

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

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

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

于 2014-10-21T13:48:53.590 回答
0

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

于 2015-08-20T15:15:06.150 回答