我在Apache中使用mod-mono托管ServiceStack Web服务,我有mono-3.0.0和xsp-2.10.2。 我主持了针对.Net framework 2.0并使用mod-mono-server2的hello world示例,它运行良好。 然后我将项目更改为目标.Net framework 4.0并使用mod-mono-server4。 我收到这个错误:
无法加载文件或程序集'System.Web.Extensions,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。系统找不到指定的文件。
System.IO.FileNotFoundException:无法加载文件或程序集'System.Web.Extensions,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。 系统找不到指定的文件。 文件名:'System.Web.Extensions,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35' 在System.AppDomain.Load(System.String assemblyString,System.Security.Policy.Evidence assemblySecurity,Boolean refonly)[0x00000] in:0 在System.AppDomain.Load(System.String assemblyString)[0x00000] in:0 at(wrapper remoting-invoke-with-check)System.AppDomain:Load(string) 在System.Reflection.Assembly.Load(System.String assemblyString)[0x00000] in:0 在System.Web.Compilation.BuildManager.LoadAssembly(System.Web.Configuration.AssemblyInfo info,System.Collections.Generic.List`1 al)[0x00000] in:0 在System.Web.Compilation.BuildManager.GetReferencedAssemblies()[0x00000]中:0 在System.Web.Compilation.BuildManager.CallPreStartMethods()[0x00000]中:0
但是文件System.Web.Extensions安装在GAC中:
gacutil -l System.Web.Extensions
以下程序集已安装到GAC中: System.Web.Extensions,Version = 1.0.61025.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35 System.Web.Extensions,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35 System.Web.Extensions,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35 项数= 3
即使我将MonoPath设置为专门获取4.0版本,也会发生同样的错误:
MonoPath /usr/local/lib/mono/4.0
我也注意到了这一点:
版本信息:Mono Runtime版本:2.10.5(tarball Fri Oct 28 10:20:24 IST 2011); ASP.NET版本:4.0.30319.1
Mono Runtime版本说2.10.5虽然我安装了mono-3.0.0,但我不知道这些信息是否对此问题有价值。
我尝试直接运行mod-mono-server4并收到此错误消息:
MOD-单 - 服务器4
MOD-单 - 服务器4 程序集/usr/local/lib/mono/4.0/System.dll中缺少方法System.Configuration.IConfigurationSectionHandler :: Create(object,object,XmlNode),在程序集/usr/local/lib/mono/4.0/System中引用。 Configuration.dll 读取配置文件时捕获到异常: System.MissingMethodException:找不到方法:'System.Configuration.IConfigurationSectionHandler.Create'。 在System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(System.String configKey)[0x00000] in:0 在System.Configuration.ConfigurationManager.GetSection(System.String sectionName)[0x00000] in:0 在System.Configuration.ConfigurationManager.get_AppSettings()[0x00000]中:0 在Mono.WebServer.Apache.Server.get_AppSettings()[0x00000]中:0 在Mono.WebServer.Apache.Server + ApplicationSettings..ctor()[0x00000]中:0 MOD-单服务器4 听:/ tmp / mod_mono_server 根目录:/ usr / local / bin 错误:已经有服务器正在侦听/ tmp / mod_mono_server
我用Google搜索了这个错误,它引导我犯了这个错误:
也许mod-mono-server4上的错误是另一个错误的起源...我将尝试获取xsp 3.0并查看它是否解决了问题。
有什么想法吗?
由于
答案 0 :(得分:5)
此错误是由于Mod_Mono / XSP使用Mono执行 .NET 4.0框架时System.Configuration程序集中的问题引起的。它试图读取“ MonoServerDefaultIndexFiles ”appSetting键,但找不到创建工厂方法。
花了一两天的时间才发现解决方案是编辑以下文件......
/选择/单声道/ bin中/ MOD-单服务器4
...在此行中将 4.0 的默认值更改为 4.5 :
exec / opt / mono / bin / mono $ MONO_OPTIONS “/opt/mono/lib/mono/4.5/mod-mono-server4.exe”“$ @”
解决这个问题后,我面临的下一个问题是,Mono通过其设置地图功能用SqliteMembershipProvider替换了内置的AspNetMembershipProvider。我在Web.config的appSettings部分添加了以下行来禁用此默认行为:
“< add key =”MonoAspnetInhibitSettingsMap“value =”disabled“/>”
经过几天的追逐,我的MVC3应用程序在Mono 3.0.3上成功运行(撰写本文时最新版)/ XSP 2.10 / Mod_Mono 2.10