5

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

服务器配置

  • CentOS 5
  • 阿帕奇 2.2.3
  • 3.2.0(2013 年 7 月 28 日星期日 00:57:40 UTC 压缩包);ASP.NET 版本:4.0.30319.17020 2013)
  • 来自 git 的最新 XSP,截至本文发表时

阿帕奇/单配置

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,但它有 Razor 2 dll,但没有 MVC3 想要起诉的 Razor 1 dll。

4

2 回答 2

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 注意此 github 存储库包含所有必需的 dll,以防您没有 NuGet 工作,因此下载量过大。
  • 在 Xamarin Studio 中打开解决方案。它几乎可以开箱即用。您要做的一件事是选择以下 2 个步骤之一以使其工作:

从 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,你可以在命令行中使用 mono --version 获得);

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

于 2014-01-13T23:24:31.433 回答
1

成功

如果要在 Mono 上运行 MVC4,则需要使用一些目前 Mono 未提供的 Microsoft dll。

请注意 -粗略查看 Mono 源代码,MC4 源代码中似乎有一些方法和类在 3.2.0 构建中不存在。可能存在损坏的功能。我正在运行的站点出于所有意图和目的都是针对最新 dll 构建的 MVC3 站点。

要复制的 Microsoft DLL

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

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

故障排除

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

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

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

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

于 2013-07-28T15:36:49.703 回答