Mono 3.0.0: не удалось загрузить файл или сборку: System.Web.Extensions.dll, Version = 4.0.0.0

Я размещаю веб-службу ServiceStack в Apache с mod-mono, у меня есть mono-3.0.0 и xsp-2.10.2. Я разместил пример hello world, ориентированный на .Net framework 2.0 и использующий mod-mono-server2, и он работал нормально. Затем я изменяю проект на целевой .Net framework 4.0 и использую mod-mono-server4. Я получаю такую ​​ошибку:

Не удалось загрузить файл или сборку System.Web.Extensions, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 или одну из их зависимостей. Система не может найти указанный файл.

System.IO.FileNotFoundException: не удалось загрузить файл или сборку System.Web.Extensions, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 или одну из его зависимостей. Системе не удается найти указанный файл. Имя файла: 'System.Web.Extensions, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35' в System.AppDomain.Load (System.String assemblyString, System.Security.Policy.Evidence assemblySecurity, Boolean refonly) [0x00000] в: 0 в System.AppDomain.Load (System.String assemblyString) [0x00000] в: 0 в (удаленное взаимодействие-вызов-с-проверкой оболочки) System.AppDomain: Загрузить (строка) в System.Reflection. Assembly.Load (System.String assemblyString) [0x00000] в: 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] в: 0

Но файл System.Web.Extensions установлен в GAC:

gacutil -l System.Web.Extensions

В GAC установлены следующие сборки: System.Web.Extensions, Version = 1.0.61025.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 System.Web.Extensions, Version = 3.5.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 System.Web.Extensions, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 Количество элементов = 3

Даже если я настрою MonoPath специально для получения версии 4.0, возникает такая же ошибка:

MonoPath /usr/local/lib/mono/4.0

Я тоже заметил это:

Информация о версии: Mono Runtime Версия: 2.10.5 (tarball Пт 28 октября 10:20:24 IST 2011); Версия ASP.NET: 4.0.30319.1

Версия Mono Runtime говорит о 2.10.5, хотя у меня установлен mono-3.0.0, я не знаю, имеет ли эта информация значение для этой проблемы.

Я попытался запустить mod-mono-server4 напрямую и получил следующее сообщение об ошибке:

мод-моно-сервер4

mod-mono-server4 Отсутствует метод System.Configuration.IConfigurationSectionHandler :: Create (объект, объект, XmlNode) в сборке /usr/local/lib/mono/4.0/System.dll, на которую имеется ссылка в сборке / 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] в: 0 в System.Configuration.ConfigurationManager.GetSection (System.String sectionName) [0x00000] в: 0 в системе .Configuration.ConfigurationManager.get_AppSettings () [0x00000] в: 0 в Mono.WebServer.Apache.Server.get_AppSettings () [0x00000] в: 0 в Mono.WebServer.Apache.Server + ApplicationSettings..ctor () [0x00000] in: 0 mod-mono-server4 Прослушивание: / tmp / mod_mono_server Корневой каталог: / usr / local / bin Ошибка: сервер уже прослушивает / tmp / mod_mono_server

Я искал эту ошибку в Google, и это привело меня к этой ошибке:

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

Возможно, ошибка на mod-mono-server4 является источником другой ошибки ... Я попробую получить xsp 3.0 и посмотрю, решит ли это проблему.

Любые идеи?

Спасибо


person Miguel Marques    schedule 27.11.2012    source источник
comment
Как вы установили Mono 3.0? На мой взгляд, вы скомпилировали из исходников, но настроили неправильный префикс.   -  person konrad.kruczynski    schedule 28.11.2012
comment
Я выполнил следующие инструкции: wiki.phonicuk.com/Installing-Mono -in-CentOS-5-x.ashx Я только что заменил mono-2.10.8.tar.gz на mono-3.0.0.tar.bz2   -  person Miguel Marques    schedule 28.11.2012
comment
Возможно, вам стоит позаботиться о ./configure --prefix=/usr/local части. Выполните команду whereis mono и посмотрите, какой префикс первый. /usr может быть? В этом случае повторите процедуру еще раз с полученным префиксом. После этого запустите mono --version, чтобы убедиться.   -  person konrad.kruczynski    schedule 28.11.2012
comment
Я обнаружил, что строка httpd.conf, в которой был MonoServerPath по умолчанию / usr / bin / mod-mono-server4, полностью игнорировалась, потому что я переименовал файл, а Apache продолжал получать mod-mono-server2. Мне не хватало отключенного MonoAutoApplication. После добавления этой строки он начал получать mod-mono-server4.exe, но с ошибкой, которую он имел, когда я запускал его напрямую, поэтому я указал mod-mono-server4 на /usr/local/src/xsp-2.10.2/src /Mono.WebServer.Apache/mod-mono-server4.exe и ошибка исчезла.   -  person Miguel Marques    schedule 29.11.2012
comment
Теперь у меня другая проблема: когда я вызываю сервис, ничего не происходит, браузер ждет вечно, а журнал ошибок Apache пуст. Если я удалю MonoPath /usr/local/lib/mono/4.0, я получаю System.TypeLoadException при инициализации AppHost, но, по крайней мере, я что-то получаю. Как я могу узнать, что происходит в первом случае? Спасибо   -  person Miguel Marques    schedule 29.11.2012


Ответы (1)


Эта ошибка возникает из-за проблемы в сборке System.Configuration для реализации Mono платформы .NET 4.0 при использовании Mod_Mono / XSP. Он пытается прочитать в ключе appSetting "MonoServerDefaultIndexFiles", но не может найти фабричный метод Create.

День или два ушло на то, чтобы понять, что решение - отредактировать следующий файл ...

/ opt / моно / бен / мод-моно-сервер4

... изменив значение по умолчанию с 4.0 на 4.5 в этой строке:

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

Когда это было решено, следующая проблема, с которой я столкнулся, заключалась в том, что Mono заменяет встроенный AspNetMembershipProvider на SqliteMembershipProvider с помощью функции карты настроек. Я добавил следующую строку в свой раздел appSettings Web.config, чтобы отключить это поведение по умолчанию:

"‹ Добавить ключ = "MonoAspnetInhibitSettingsMap" value = "disabled" / ›"

После пары дней погони мое приложение MVC3 успешно работало на Mono 3.0.3 (последняя версия на момент написания этой статьи) / XSP 2.10 / Mod_Mono 2.10

person marlonwilliams    schedule 15.02.2013
comment
Дополнительная информация на stackoverflow.com/ questions / 12961694 / - person nickvane; 20.03.2013