使用.NET MVC 4运行Mono 3.2.0

我正在试图让Mono 3.0安装程序在.NET 4和.NET 4.5下运行MVC4网站。 我一直在处理各种错误,我能做些什么来启动和运行?

服务器configuration

  • CentOS 5
  • Apache 2.2.3
  • 3.2.0(tarball Sun Jul 28 00:57:40 UTC 2013); ASP.NET版本:4.0.30319.17020 2013)
  • 最新的XSP从git,截至这篇文章的时间

Apache / Monoconfiguration

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

更新

问题的症结在于Mono没有提供该站点所需的MVC4。 它仍然有MVC3 DLL,但它有剃刀2 DLL,但不是MVC3想要起诉的剃刀1 DLL。

您需要的一切现在可以在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仓库包含了所有需要的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,你可以在单声道的命令行下获得);

Microsoft.Web.Infrastructure.dll在Windows上的.Net上是必需的,因此如果您希望跨平台部署,删除它不是更简单的方法

成功

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

谨慎的一句话 –粗略看一下单声道源代码,似乎在3.2.0版本中不存在MC4源代码中的方法和类。 可能有被破坏的功能。 我正在运行的网站是针对所有意图和目的的一个MVC3网站建立对最新的dll。

Microsoft DLL复制

  • System.Web.Abstractions – 4.0
  • System.Web.Helpers – 2.0
  • System.Web.Mvc – 4.0

一旦你复制了dll,如果你仍然有问题,如果上述修复不起作用,你可能不得不做一些侦探工作。 如果您收到错误消息说单声道无法找到该DLL,它通常是三个原因之一:

故障排除

  1. 是不是有DLL – 您可以尝试使用Microsoft版本的DLL

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

  3. 它stil无法找到dll – 在您的web.config的编译/程序集部分中添加程序集

  4. 你会得到一个“无法查找查找…”的消息 – 如果该特定视图文件夹中的任何视图有编译错误,那么你会收到这个消息。