首页 文章

使用.NET MVC 4运行Mono 3.2.0

提问于
浏览
4

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

Server Configuration

  • 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 Config

MonoServerPath "/usr/local/bin/mod-mono-server4"

/ 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" "$@"

Update

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

2 回答

  • 1

    您现在所需的一切都可以在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
    

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

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

  • 5

    Success

    如果你想在Mono上运行MVC4,你需要使用Mono目前不提供的一些Microsoft dll .

    需要注意的是 - 粗略地看一下Mono源代码,MC4源代码中似乎存在3.2.0版本中不存在的方法和类 . 可能存在破坏的功能 . 我运行的网站是出于所有意图和目的, Build 一个针对最新dll的MVC3网站 .

    Microsoft DLLs to copy

    • System.Web.Abstractions - 4.0

    • System.Web.Helpers - 2.0

    • System.Web.Mvc - 4.0

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

    Troubleshooting

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

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

    • 它无法找到dll - 在web.config的compilation / assemblies部分中添加程序集

    • 你're getting a '可以't find view searched...'消息 - 如果该特定视图文件夹中的任何视图有编译错误,那么您将收到此消息 .

相关问题