【问题标题】:Mono 3.0.0: Could not load file or assembly: System.Web.Extensions.dll, Version=4.0.0.0Mono 3.0.0:无法加载文件或程序集:System.Web.Extensions.dll,版本 = 4.0.0.0
【发布时间】:2012-11-27 17:08:54
【问题描述】:

我在 Apache 中使用 mod-mono 托管 ServiceStack Web 服务,我有 mono-3.0.0 和 xsp-2.10.2。 我托管了面向 .Net 框架 2.0 并使用 mod-mono-server2 的 hello world 示例,它运行良好。 然后我将项目更改为以 .Net 框架 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 信息,System.Collections.Generic.List`1 al)[0x00000] 在:0 在 System.Web.Compilation.BuildManager.GetReferencedAssemblies () [0x00000] 在:0 在 System.Web.Compilation.BuildManager.CallPreStartMethods () [0x00000] in :0

但是文件 System.Web.Extensions 安装在 GAC 中:

gacutil -l System.Web.Extensions

以下程序集安装到 GAC 中: System.Web.Extensions,版本=1.0.61025.0,文化=中性,PublicKeyToken=31bf3856ad364e35 System.Web.Extensions,版本=3.5.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 System.Web.Extensions,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35 项目数 = 3

即使我将 MonoPath 设置为专门获取 4.0 版本,也会发生相同的错误:

MonoPath /usr/local/lib/mono/4.0

我也注意到了这一点:

版本信息:Mono 运行时版本: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-mono-server4

mod-mono-server4 程序集 /usr/local/lib/mono/4.0/System.dll 中缺少方法 System.Configuration.IConfigurationSectionHandler::Create(object,object,XmlNode),在程序集 /usr/local/lib/mono/4.0/System 中引用。配置文件 读取配置文件时发现异常: System.MissingMethodException:找不到方法:'System.Configuration.IConfigurationSectionHandler.Create'。 在 System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection (System.String configKey) [0x00000] 在: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] in :0 在 Mono.WebServer.Apache.Server+ApplicationSettings..ctor () [0x00000] in :0 mod-mono-server4 监听:/tmp/mod_mono_server 根目录:/usr/local/bin 错误:已经有一个服务器正在监听 /tmp/mod_mono_server

我用谷歌搜索了这个错误,它导致我发现了这个错误:

https://bugzilla.xamarin.com/show_bug.cgi?id=7967

也许mod-mono-server4上的错误是另一个错误的根源......我会尝试获取xsp 3.0,看看它是否解决了问题。

有什么想法吗?

谢谢

【问题讨论】:

  • 您是如何安装 Mono 3.0 的?对我来说,您似乎是从源代码编译但配置了错误的前缀。
  • 我按照以下说明操作:wiki.phonicuk.com/Installing-Mono-in-CentOS-5-x.ashx 我刚刚将“mono-2.10.8.tar.gz”更改为“mono-3.0.0.tar.bz2”
  • 您应该关心./configure --prefix=/usr/local 部分。执行whereis mono 命令,看看第一个前缀是什么。 /usr 也许?在这种情况下,使用您获得的前缀再次执行该过程。确定之后运行mono --version
  • 我发现具有 MonoServerPath 默认 "/usr/bin/mod-mono-server4" 的 httpd.conf 行被完全忽略了,因为我重命名了文件并且 Apache 不断得到 mod-mono -服务器2。我错过了“禁用 MonoAutoApplication”。添加该行后,它开始获取“mod-mono-server4.exe”,但是当我直接运行它时出现错误,所以我将 mod-mono-server4 指向 /usr/local/src/xsp-2.10.2 /src/Mono.WebServer.Apache/mod-mono-server4.exe 错误消失了。
  • 现在我遇到了另一个问题,当我调用该服务时没有任何反应,浏览器永远等待并且 Apache 错误日志为空。如果我删除“MonoPath /usr/local/lib/mono/4.0”,我会在 AppHost 初始化时得到一个 System.TypeLoadException,但至少我得到了一些东西。我怎么知道第一种情况发生了什么?谢谢

标签: apache mono servicestack mod-mono


【解决方案1】:

此错误是由 Mod_Mono / XSP 使用时 Mono 的 .NET 4.0 框架 实现的 System.Configuration 程序集存在问题引起的。它正在尝试读取“MonoServerDefaultIndexFiles”appSetting 键,但找不到创建工厂方法。

花了一两天的时间才弄清楚解决办法是编辑以下文件...

/opt/mono/bin/mod-mono-server4

...通过在这一行中将 4.0 的默认值更改为 4.5

执行 /opt/mono/bin/mono $MONO_OPTIONS "/opt/mono/lib/mono/4.5/mod-mono-server4.exe" "$@"

解决了这个问题后,我面临的下一个问题是 Mono 通过其设置映射功能将内置的 AspNetMembershipProvider 替换为 SqliteMembershipProvider。我在 Web.config 的 appSettings 部分添加了以下行来禁用此默认行为:

""

经过几天的追逐,我的 MVC3 应用程序在 Mono 3.0.3(撰写本文时的最新版本)/XSP 2.10/Mod_Mono 2.10 上成功运行

【讨论】:

猜你喜欢
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多