4

我正在尝试使用带有 fastcgi-mono-server4 的 mono 2.10.8.1 在我的 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

一月份有一个相关的线程,但问题和答案似乎都是 mod_mono 特定的并且相当手动。有人对尝试调试/解决/解决此问题有什么建议吗?它变得非常令人沮丧。特别是,是否有任何“不受支持”的解决方法,我可以从我的 Windows Server 机器复制一些东西以使用 MS 实现而不是有问题的单声道?

(我也提交了错误报告。)

4

2 回答 2

2

由于错误似乎是 Mono JIT 尝试编译不存在的临时文件的问题,因此我花了几天时间尝试解决此问题的不同方法(与解决它相比)。一种可行的解决方案是在 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),但不知何故它完成了这项工作。我一直在等着看这是否只是一个侥幸,但自从我十天前问这个问题以来,可能有十几个提交/部署一直很好,所以我认为可以肯定地说它有效。

于 2012-04-25T05:00:46.490 回答
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

但这与预编译没有任何关系,而是与我的用户名中的反斜杠有关。我使用 likewise-open 登录到 Windows 域,所以我的用户名是 <DOMAIN/>\<username/> 而我的主目录没有反斜杠:/home/likewise-open/<DOMAIN/>/<username/ >。这种差异或只是反斜杠本身导致 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/<DOMAIN/>/<username/>-temp-aspnet-0/ 应用程序按预期工作。

我花了将近 2 天的时间才看到这个,所以希望我能帮助其他人回答这个问题。

于 2014-03-05T13:09:58.183 回答