我试图让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 回答
您现在所需的一切都可以在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
或者,从命令行:
(用您的单声道版本替换3.2.5,您可以通过单声道版本获得命令行);
Windows上的.Net需要Microsoft.Web.Infrastructure.dll,因此如果您想要跨平台可部署性,删除它不是更简单的方法
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...'消息 - 如果该特定视图文件夹中的任何视图有编译错误,那么您将收到此消息 .