使用.NET MVC 4运行Mono 3.2.0

Bri*_*ian 5 apache asp.net mono asp.net-mvc-4 asp.net-4.5

我试图让Mono 3.0安装在.NET 4和.NET 4.5下运行MVC4站点.我一直在处理各种错误,我该怎么做才能让它运行起来?

服务器配置

  • CentOS 5
  • Apache 2.2.3
  • 3.2.0(tarball Sun Jul 28 28:57:40 UTC 2013); ASP.NET版本:4.0.30319.17020 2013)
  • 来自git的最新XSP,截至本文发布之时

Apache/Mono配置

MonoServerPath "/usr/local/bin/mod-mono-server4"
Run Code Online (Sandbox Code Playgroud)

/ usr/local/bin/mod-mono-server4内容:

#!/bin/sh
exec /usr/local/bin/mono $MONO_OPTIONS "/usr/local/lib/mono/4.5/mod-mono-server4.exe" "$@"
Run Code Online (Sandbox Code Playgroud)

更新

问题的关键在于Mono没有附带网站所需的MVC4.它仍然有MVC3 dll,但它有Razor 2 dll但不是MVC3想要起诉的Razor 1 dll.

Chr*_*oll 5

您现在所需的一切都可以在Mono框架或NuGet中使用.我为.Net 4.0和.Net 4.5创建了MVC4的可下载模板以及解决问题的一些注意事项:

http://www.cafe-encounter.net/p1510/asp-net-mvc4-net-framework-version-4-5-c-razor-template-for-mono-on-mac-and-linux

博文的步骤如下:

  • git clone github.com/chrisfcarroll/AspNetTemplatesForMono/Mvc4CSharpRazorFx45Intranet NB这个github repo包含了所有必需的dll,以防你没有NuGet工作,所以这是一个超大的下载.
  • 在Xamarin Studio中打开解决方案.它几乎可以开箱即用.您需要做的一件事是选择以下两个步骤中的一个来使其工作:

从bin \目录和项目中删除Microsoft.Web.Infrastructure.dll

或者,从命令行:

sudo mkdir /Library/Frameworks/Mono.framework/Versions/3.2.5/etc/mono/registry
sudo chmod g+rwx /Library/Frameworks/Mono.framework/Versions/3.2.5/etc/mono/registry
Run Code Online (Sandbox Code Playgroud)

(用您的单声道版本替换3.2.5,您可以通过单声道版本获得命令行);

Windows上的.Net需要Microsoft.Web.Infrastructure.dll,因此如果您想要跨平台可部署性,删除它不是更简单的方法


Bri*_*ian 1

成功

如果你想在Mono上运行MVC4,你需要使用一些Microsoft dll,但目前Mono还没有提供。

需要注意的是 -粗略地查看 Mono 源代码,MC4 源代码中似乎存在 3.2.0 版本中不存在的方法和类。可能有些功能已损坏。我正在运行的站点实际上是一个针对最新 dll 构建的 MVC3 站点。

要复制的 Microsoft DLL

  • 系统.Web.抽象 - 4.0
  • 系统.Web.Helpers - 2.0
  • 系统.Web.Mvc-4.0

一旦你复制了 dll,如果你仍然遇到问题,如果上述修复不起作用,你可能需要做一些侦探工作。如果您收到一条错误消息,指出 Mono 找不到 DLL,通常是以下三个原因之一:

故障排除

  1. 没有 dll -您可以尝试使用 Microsoft 版本的 DLL

  2. 当 GAC 或项目文件夹中安装了正确的 DLL 时,它会查找旧版本的 DLL -项目中的程序集可能在某处引用该版本。您可以使用绑定重定向来强制使用您所使用的特定版本

  3. 它仍然找不到 dll -将程序集添加到 web.config 的编译/程序集部分

  4. 您收到“找不到已搜索的视图...”消息 -如果该特定视图文件夹中的任何视图存在编译错误,那么您将收到此消息。