Mono 3.2.x 上的 Razor 引擎,具有快速 CGI - 目标特定的 .net?

标签 razor nginx mono servicestack fastcgi

我的网站在 mono 2.10 上运行,我即将在全新服务器上升级到 mono 3.2.x。

它使用 XSP4 工作,ServiceStack Razor View 正确渲染。 (它修复了 2.10 中的许多问题)

当我将站点设置为使用 nginx + Fast CGI (4) 时,我收到了 HttpCompileException,原因是:

The predefined type `System.Collections.Generic.IReadOnlyList' is defined multiple times. Using definition from `mscorlib.dll'

记住这在 xsp4 上工作得很好,所以我认为它需要一些设置才能将它绑定(bind)到一个 .Net 实例,也许它在 .net 4.0 和 .net 4.5 之间混淆了?关于如何强制它仅使用其中之一有什么建议吗?

注意:我使用最新版本 (3.2.7) 从 git 安装,因为 3.2.5 版本会崩溃。我使用的是干净的 Amazon EC2 Ubuntu 12.04 64 位。它以前没有单声道,当我尝试 3.2.5 时,它是另一个现已删除的实例。

这与以下错误大致相同:RazorEngine on Mono - TemplateCompilationException thrown

但我没有安装其他版本。构建过程添加了其他内容,但后来被删除,但没有效果。 mscorlib 的所有实例都在这里:

/usr/lib/mono/2.0/mscorlib.dll
/usr/lib/mono/4.5/mscorlib.dll
/usr/lib/mono/4.0/mscorlib.dll

最佳答案

我发现了问题所在并能够解决它。

罪魁祸首是这些文件: https://github.com/mono/xsp/tree/master/src/Mono.WebServer.FastCgi/Compatibility

出于某种原因,他们添加了这些编译为 NET 4.0 目标的兼容性类(没有 IReadOnlyList 类),但是当我们运行 fastcgi-mono-server4 时,它在 4.5 运行时下运行,这会导致有一个 IReadOnlyList 类,因此会生成 Razor HttpCompile 错误。

解决方案是将这 2 个参数 -d:NET_4_5 -sdk:4.5 添加到 FastCGI 源项目的 Makefile.in 中:

@NET_4_0_TRUE@  $(DMCS) -d:NET_2_0 -d:NET_4_0 -d:NET_4_5 -sdk:4.5 $(MCSFLAGS) $(references4) /out:$@ \

然后我用 ./configure、make、make install 重新编译并重新安装,Razor 编译错误就消失了。

如果您不想经历所有这些麻烦,我建议您坚持使用 xsp 项目的最新发布版本,该项目没有这些兼容性类。

关于Mono 3.2.x 上的 Razor 引擎,具有快速 CGI - 目标特定的 .net?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20435895/

相关文章:

nginx - 如何告诉 gzip_static 不要寻找图像文件?

c# - Mono 找不到字体或颜色

mono - RhinoMocks 在最新版本的 Mono/MonoDevelop 中破坏了编译器

c# - 如何将动态数据写入 MVC 3 Razor 中的页面布局?

asp.net - Css 在 asp.net mvc3 Razor Views 中不能正常工作

php - HHVM fastcgi + Nginx 性能波动

ruby-on-rails - 随机 unicorn 超时和拍打

c# - MonoMac/Xamarin.Mac : EntryPointNotFoundException for AudioSession. 初始化()

razor - 编辑模式下的 Sitecore 下拉列表

asp.net-mvc - 模型数据注释 [DataType(DateType.Date)] 呈现 DatePicker 但隐藏我的值?