Mono ASP.NET MySQL: работает, но всегда выдает начальное исключение System.IO.FileNotFoundException для ‘MySQL.Data’

#mysql #asp.net #mono

#mysql #asp.net #mono

Вопрос:

Я создал ASP.NET веб-приложение на сервере Linux под управлением Apache и mod_mono с базой данных MySQL с использованием MySQL Connector / NET. Все работает великолепно… но только после того, как генерируется начальное исключение: если в течение «некоторого времени» никто не делал запросов для этого сайта (я не знаю точной продолжительности и причины этого, но, похоже, действует какой-то часовой тайм-аут), тогда новый запрос всегда приводит к:

 System.IO.FileNotFoundException
Could not load file or assembly 'MySql.Data' or one of its dependencies
Description: HTTP 500.Error processing request.
Details: Non-web exception. Exception origin (name of application or object): mscorlib.
Exception stack trace:
   at System.AppDomain.Load (assemblyString, assemblySecurity, refonly)
   at System.AppDomain.Load (assemblyString)
   at (wrapper remoting-invoke-with-check) System.AppDomain:Load (string)
   at System.Reflection.Assembly.Load (assemblyString)
   at System.Web.Compilation.BuildManager.LoadAssembly (info, al)
   at System.Web.Compilation.BuildManager.GetReferencedAssemblies ()
   at System.Web.Compilation.BuildManager.CallPreStartMethods ()
  

Простая перезагрузка / обновление или повторный запрос браузера всегда выполняется успешно, и после этого все работает нормально, даже если браузер закрыт, а затем запускается новый сеанс до истечения «некоторого времени», и даже если другой пользователь из другого места делает запрос — все всегда работает после этого первоначального единственного исключенияэто каким-то образом «исправляется» простым повторным выполнением запроса.

Мысли о причинах / исправлениях этого раздражения? Это не производит хорошего первого впечатления!

Комментарии:

1. К счастью, такое впечатление вы должны получить как можно раньше. Только ASP.NET Core — это полностью поддерживаемый кроссплатформенный вариант от Microsoft, поэтому вам следует остановиться сейчас и переключить полосу движения.

Ответ №1:

Тот факт, что ошибка возникает только при первой попытке, означает, что, в конечном счете, файл (DLL) найден. Единственный экземпляр MySql.Data.dll находится (был) в GAC.

Но ASP.NET веб-приложения также будут использовать библиотеки DLL в папке /bin в корневом каталоге приложения, поэтому я создал /bin и удалил копию MySql.Data.dll into it: проблема решена! Больше никаких ошибок при запуске.