我正在尝试使用单声道2.10.8.1 w / fastcgi-mono-server4在我的Linux服务器上部署在Mono / OSX上开发的ASP MVC项目
webapp总是正常启动,但随后我开始为各种URI获取随机的CS0006编译错误,一旦它们中断,它们将一直被破坏,直到我重新启动服务器应用程序。
示例错误:
Server Error in '/' Application
Compilation Error
Description: Error compiling a resource required to service this request. Review your source file and modify it to fix this error.
Compiler Error Message: CS0006: Metadata file `/tmp/root-temp-aspnet-0/ed68754/App_global.asax_40e709ea.dll' could not be found
~/Views/Order/Download.aspx
1月份有a related thread,但问题和答案似乎都是mod_mono具体而且手工波浪状。任何人都有任何关于尝试调试/解决/解决此问题的建议?它变得非常令人沮丧。特别是,是否有任何“不支持”的解决方法,我可以从我的Windows Server机器复制一些东西,以使用MS实现而不是错误的单声道实现?
(我也filed a bug report。)
答案 0 :(得分:2)
由于错误似乎是Mono JIT试图编译不存在的临时文件的问题,我花了几天尝试不同的方法来解决这个问题(vs解决它)。一个有效的解决方案是在Windows上使用aspnet_compiler创建一个二进制版本,可以在Linux / Mono上按原样复制和运行(因为最新版本的Mono现在支持预编译的ASP.NET应用程序)。
但是,我一直在寻找原生的Linux解决方案,而且我不想编译和同步二进制文件(与同步代码的GIT代码),所以当我来到时,我正在寻找另一种解决方案在Mono中提前编译,这几乎相当于Windows上的ngen.exe。
虽然它没有预先编译所有内容,但似乎已经完成了这个伎俩。对我来说,这个部署脚本可以在没有任何运行时构建失败的情况下完成工作:
xbuild SystemDiscs.sln
mono --aot -O=all SystemDiscs/bin/SystemDiscs*.dll
killall -9 mono
nohup fastcgi-mono-server4 /socket=tcp:127.0.0.1:8000 /applications=/:/var/asp/S
ystemDiscs/SystemDiscs/ > /var/log/systemdiscs.log &
其中SystemDiscs*.dll
是在第一步中使用xbuild
编译的解决方案的输出。我认为这不会预编译ASP页面(据我所知,x86不支持--aot = full),但不知怎的,它完成了这项工作。我等着看这是不是只是一个侥幸,但是自从我十天前问到这个问题以来,可能还有十几次提交/部署,所以我认为可以说它有效。
答案 1 :(得分:1)
我有一个类似的问题:
Compilation Error
Description: Error compiling a resource required to service this request. Review your source file and modify it to fix this error.
Compiler Error Message: CS0006: Metadata file `/tmp/<DOMAIN/>/<username/>-temp-aspnet-0/5ed74d00/App_global.asax_34cccb99.dll' could not be found
/Default.aspx
但它与预编译没有任何关系,但我的用户名中有反斜杠。我使用same-open登录到Windows域名,因此我的用户名为&lt; DOMAIN /&gt; \&lt; username /&gt;而我的主目录没有反斜杠:/ home / similar-open /&lt; DOMAIN /&gt; /&lt; username /&gt;。这种差异或只是反斜杠本身导致mono无法在temp目录中找到已编译的global.asax。如果仔细查看详细输出,您会看到out参数中的反斜杠\更改为正斜杠/:
dmcs /target:library /lib:"/home/likewise-open/<DOMAIN/>/<username/>/Documents/test9999/test9999/bin" /debug+ /optimize- /warn:4 /out:"/tmp/<DOMAIN/>\<username/>-temp-aspnet-0/5ed74d00/App_Web_17ca7bdd.dll" /r:"/usr/lib/mono/4.0/mscorlib.dll" /r:"/usr/lib/mono/gac/Microsoft.CSharp/4.0.0.0__b03f5f7f11d50a3a/Microsoft.CSharp.dll" /r:"/usr/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll" /r:"/usr/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll" /r:"/usr/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll" /r:"/usr/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll" /r:"/usr/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll" /r:"/usr/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll" /r:"/usr/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll" /r:"/usr/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll" /r:"/usr/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll" /r:"/usr/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll" /r:"/usr/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll" /r:"/usr/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll" /r:"/usr/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll" /r:"/usr/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll" /r:"/usr/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll" /r:"/usr/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll" /r:"/usr/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll" /r:"/usr/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll" /r:"/usr/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll" /r:"/usr/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll" /r:"/usr/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll" /r:"/home/likewise-open/<DOMAIN/>/<username/>/Documents/test9999/test9999/bin/test9999.dll" /r:"/tmp/<domain/>/<username/>-temp-aspnet-0/5ed74d00/App_global.asax_34cccb99.dll" /nowarn:0169 /d:DEBUG -- "/tmp/<DOMAIN/>\<username/>-temp-aspnet-0/5ed74d00/App_Web_17ca7bdd_0.cs"
所以:
/out:"/tmp/<DOMAIN/>\<username/>-temp-aspnet-0/5ed74d00/App_Web_17ca7bdd.dll
变为
/tmp/<DOMAIN/>/<username/>-temp-aspnet-0/5ed74d00/App_global.asax_34cccb99.dll
如果我将目录5ed74d00复制到/ tmp /&lt; DOMAIN /&gt; /&lt; username /&gt; -temp-aspnet-0 /该应用程序按预期工作。
我花了将近2天才看到这个,所以希望我可以帮助其他人这个答案。