servicestack,fastcgi,Razor,Nginx,Mono,servicestack,Fastcgi" /> servicestack,fastcgi,Razor,Nginx,Mono,servicestack,Fastcgi" />

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

Mono 3.2.x上的Razor引擎,带有快速CGI-特定于目标的.net?,razor,nginx,mono,servicestack,fastcgi,Razor,Nginx,Mono,servicestack,Fastcgi,我的网站是在mono 2.10上运行的,我几乎完成了一个全新的服务器升级到mono 3.2.x 它使用XSP4工作,ServiceStack Razor视图可以正确渲染。(它在2.10中修复了许多人工制品) 当我将站点设置为使用nginx+Fast CGI(4)时,我得到了一个httpcompileeexception,原因是: The predefined type `System.Collections.Generic.IReadOnlyList' is defined multiple t

我的网站是在mono 2.10上运行的,我几乎完成了一个全新的服务器升级到mono 3.2.x

它使用XSP4工作,ServiceStack Razor视图可以正确渲染。(它在2.10中修复了许多人工制品)

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

The predefined type `System.Collections.Generic.IReadOnlyList' is defined multiple times. Using definition from `mscorlib.dll'
请记住,这在xsp4中运行良好,因此我认为需要一些设置来将其绑定到一个.Net实例,也许它混淆了.Net 4.0和.Net 4.5?有没有关于如何强制它只使用其中一个的建议

注意:我使用最新版本(3.2.7)从git安装,因为3.2.5版本会崩溃。我使用的是干净的AmazonEC2Ubuntu 12.0464位。它以前没有mono,当我尝试3.2.5时,它是另一个现在被删除的实例

这在很大程度上与以下错误相同:

但我没有安装其他版本。生成过程添加了其他已删除的内容,但没有任何效果。mscorlib的所有实例如下:

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

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

罪魁祸首是这些文件:

出于某种原因,他们添加了这些编译到NET 4.0目标的Compability类(该目标没有IReadOnlyList类),但当我们运行fastcgi-mono-server4时,它在4.5运行时下运行,该运行时确实有IReadOnlyList类,因此会生成Razor HttpCompile错误

解决方案是将以下两个参数-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项目版本,它没有这些兼容类。

只是尝试使用xsp.webapp方法,而不是直接使用,以防导致它与xsp工作相同,但运气不好……Apache工作正常。。。那么现在就开始吧。一定是快速CGI的一些微妙配置。这里有同样的问题。只安装了一个mono。Apache在FastCGI下工作,或者您正在使用mod_mono@Harrydma我不明白一件事,参数的更改是在FastCGI mono服务器上进行的?如果是这样,您从哪里获得了修改它的源代码?我有点困惑,我已经用nginx和fastcgi运行了mono 2.10,我还想升级t 3.2x。我正在从git安装,我在修改Makefile.in后再次配置了它。但是当我做的时候,我得到了一个错误,你知道吗?修复了,我必须对Fpm Makefile做同样的操作。我很高兴你做了。