我的网站在单声道2.10上工作,我几乎完成升级到单声道3.2.x的全新服务器。
它使用XSP4,ServiceStack Razor视图呈现正确。 (它在2.10中修复了很多文物)
当我设置网站使用nginx +快速CGI(4)但是我得到一个HttpCompileException,由以下原因引起的:
The predefined type `System.Collections.Generic.IReadOnlyList' is defined multiple times. Using definition from `mscorlib.dll'
请记住,这与xsp4工作正常,所以我认为它需要一些设置绑定到一个.Net实例,也许它在.net 4.0和.net 4.5之间混淆? 关于如何强迫它只使用其中一个的任何build议?
注:我使用最新的(3.2.7)从git安装,因为3.2.5版本会崩溃。 我使用干净的Amazon EC2 Ubuntu 12.04 64位。 它之前没有单声道,当我尝试3.2.5时,它是另一个现在被删除的实例。
这与以下大致相同的错误: 单引号上的RazorEngine – 抛出TemplateCompilationException
但是我没有安装其他版本。 构build过程添加了其他已被删除的内容。 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错误。
解决方法是将这两个参数-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项目,没有这些兼容性类。