【问题标题】:Mono random CS0006 compilation errors w/ fastcgi-mono-server4带有 fastcgi-mono-server4 的单声道随机 CS0006 编译错误
【发布时间】:2012-04-15 08:33:43
【问题描述】:

我正在尝试使用带有 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

从 1 月份开始有 a related thread,但问题和答案似乎都是 mod_mono 特定的,而且相当随意。有人对尝试调试/解决/解决此问题有什么建议吗?它变得非常令人沮丧。特别是,是否有任何“不受支持”的解决方法,我可以从我的 Windows Server 机器中复制某些内容以使用 MS 实现而不是有问题的单声道实现?

(我也有filed a bug report。)

【问题讨论】:

  • 这很奇怪,似乎它正在尝试编译视图,同时依赖于仍然要生成的 dll。您是否尝试过更新到最新版本的单声道?我已经尝试过使用 mono 2.10.5 的 fastcgi-mono-server 和 mod_mono,但从未遇到过这个问题。

标签: asp.net linux mono fastcgi-mono-server


【解决方案1】:

由于错误似乎是 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),但不知何故它完成了这项工作。我一直在等着看这是否只是一个侥幸,但自从我十天前问这个问题以来,可能有十几个提交/部署都运行良好,所以我认为可以肯定地说它有效。

【讨论】:

    【解决方案2】:

    我有一个类似的问题:

    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 域,所以我的用户名是 \ 而我的主目录没有反斜杠:/home/likewise-open//。这种差异或只是反斜杠本身导致 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//-temp-aspnet-0/ 应用程序将按预期工作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 2012-02-12
      相关资源
      最近更新 更多