【问题标题】:Does the Razor View Engine work for Mono?Razor 视图引擎是否适用于 Mono?
【发布时间】:2011-05-13 11:36:37
【问题描述】:

我尝试搜索了一下,但没有找到答案。 Razor 视图引擎是否在 Mono 中工作?

【问题讨论】:

  • this有什么建议吗?

标签: asp.net mono razor


【解决方案1】:

是的,确实如此。我让它在 Linux 上与 mono 一起工作。

您需要来自
http://ftp.novell.com/pub/mono/sources-stable/
http://download.mono-project.com/sources/mono/

的稳定来源的单声道 2.10.2+

然后,您需要将这些程序集本地复制到应用程序的 bin 目录中(您从 Windows 上的 Visual Studio 中获取它们):

System.Web.Mvc.dll
System.Web.Razor.dll
System.Web.WebPages.dll
System.Web.WebPages.Deployment.dll
System.Web.WebPages.Razor.dll

然后,您可能必须摆脱您可能犯的以下错误:

错误:执行 _AppStart 时无法创建存储范围。
原因:Microsoft.Web.Infrastructure.dll 被本地复制到 bin 目录。
解决方法:删除 Microsoft.Web.Infrastructure.dll 并使用单声道 版本

错误:System.Web.Handlers.ScriptModule:.ctor () 中的 IL 代码无效: 方法体为空。
原因:System.Web.Extensions.dll 以某种方式被本地复制到 bin 目录。
解决方法:删除 System.Web.Extensions.dll 并使用单声道版本


错误:无法加载模块中的类。说明:HTTP 500. 错误处理请求。
原因:System.Web.WebPages.Administration.dll 被本地复制到 bin 目录。
解决方法:删除 System.Web.WebPages.Administration.dll 并取消引用它


错误:无法加载类型
来自程序集的“System.Web.WebPages.Razor.RazorBuildProvider” 'System.Web.WebPages.Razor,版本=1.0.0.0,文化=中性, PublicKeyToken=31bf3856ad364e35'。说明:HTTP 500。错误 处理请求。
原因:System.Web.Razor.dll 损坏或丢失(或 x64 而不是 x32,反之亦然) ...
解决方法:获取未损坏的版本的 System.Web.Razor.dll 和 localcopy到bin目录

编辑
从 mono 2.12 / MonoDevelop 2.8 开始,所有这些都不再需要了。

请注意,在 2.10 (Ubuntu 11.10) 上,还需要 localcopy System.Web.DynamicData.dll,否则您会收到仅在 App_Start 上发生的错误(如果您不这样做,您第一次会收到 YSOD调用一个页面,但只是第一次,因为只有 App_Start 才会被调用。)。

注意
对于带有 ASP.NET MVC4 的单声道 3.0+: 安装脚本中有一个“错误”。 或者说是不完整。

mod-mono、fastcgi-mono-server4 和 xsp4 无法正常工作。
例如:fastcgi-mono-server4 给你这个调试输出:

[error] 3384#0: *101 upstream sent unexpected FastCGI record: 3 while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost:8000"

这是因为安装mono3后使用的是4.5框架,但是xsp、fastcgi-mono-server4和mod-mono不在4.5 GAC中,只有4.0 gac。
要解决此问题,请使用此 bash 脚本:

#!/bin/bash

# Your mono directory
#PREFIX=/usr
PREFIX=/opt/mono/3.0.3


FILES=('mod-mono-server4'
       'fastcgi-mono-server4'
       'xsp4')

cd $PREFIX/lib/mono/4.0

for file in "${FILES[@]}"
do
   cp "$file.exe" ../4.5
done


cd $PREFIX/bin

for file in "${FILES[@]}"
do
  sed -ie 's|mono/4.0|mono/4.5|g' $file
done

如果您通过 FastCGI(例如 nginx)使用它,您还需要为 TransmitFile 修复 chuncked_encoding 错误
Why do I have unwanted extra bytes at the beginning of image?(在单声道 3.2.3 中修复)

PS:
您可以从此处获取 3.x 的 .debs:
https://www.meebey.net/posts/mono_3.0_preview_debian_ubuntu_packages/ 或者自己从 github 编译它们 Installing Mono 3.x in Ubuntu/Debian 或者像这样来自稳定的来源 http://ubuntuforums.org/showthread.php?t=1591370

2015

您现在可以使用Xamarin provided packages

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
sudo apt-get update

如果您需要最新的功能,也可以获取CI packages (nightly builds, so to say),如果您需要最新(或几乎最新)的版本

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://jenkins.mono-project.com/repo/debian sid main" | sudo tee /etc/apt/sources.list.d/mono-jenkins.list
sudo apt-get update

【讨论】:

  • 我找不到任何 x64 或 x86(如您所写的 x32)版本。我不认为真的有一个。虽然我在几分钟内遇到了同样的错误,但它突然消失了,我不知道为什么:(
  • @DotNetWise:你就在那儿。起初我找不到剃须刀组件,所以我从 x64 上的 MSIL GAC 中获取了它。那时它不起作用,起初我无法在单声道上引用它。我认为这可能是 32/64 位问题的原因。它可能由于崩溃而损坏,但它可以在 Windows 上正常工作。但 System.Web.Razor.dll 肯定有问题。
  • 你是一个冠军 - 我一直在与存储范围的错误作斗争,找到了这个并解决了它。谢谢
  • 只是一个简短的说明,MVC 3 has been added to Mono 因此在 Mono 2.12 及更高版本中没有必要跳过上面的所有环节。
  • @xameeramir:使用最新的单声道版本应该可以解决 MVC 5 的问题。如果 Xamarin 包不够最新,请使用 CI 包。
【解决方案2】:

【讨论】:

    【解决方案3】:

    我的猜测是你需要等待 MVC3 的发布(当它成为开源时)才能得到完美的回答。

    不过,我相信 Mono 团队会成功的。

    【讨论】:

      【解决方案4】:

      Mono 2.10 及更高版本完全支持 MVC3 和 Razor,尽管 Mono 项目目前还不能提供包含 MVC3/Razor 堆栈的开源实现的 Mono(与包含 MVC1 和 MVC2 的方式相同)。

      来自Release Notes

      虽然 ASP.NET MVC3 是开源的 并根据条款获得许可 MS-PL 许可证,需要一些时间 对新库的依赖 不是开源的,也不是它们的一部分 Microsoft.NET 框架。

      此时我们还没有打开 那些的源实现 图书馆,所以我们不能运送完整的 带有 Mono 的 ASP.NET MVC3 堆栈(我们仍然 使用 Mono 发布 ASP.NET MVC 1 和 MVC 2 为了您的部署乐趣)。

      然而,这个 Mono 版本已经足够 您将成为的错误修复和补丁 能够运行 ASP.NET MVC3 站点 它。

      【讨论】:

        【解决方案5】:

        看来我们快到了:

        http://gonzalo.name/blog/archive/2011/Jan-21.html

        看起来它还没有在任何已发布的版本中,但您可以从源代码管理中运行它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-15
          • 1970-01-01
          相关资源
          最近更新 更多