Ошибка при просмотре с использованием Mono и MVC 4

Я пытаюсь начать работу с платформой Mono и столкнулся с многочисленными проблемами, последний из которых вызвал у меня раздражение. Я все искал решение и не смог понять это.

Среда
Ubuntu 12.04 (на виртуальной машине Hyper-V)
Visual Studio 2012 (полностью обновлено)
ASP.NET MVC 4
.NET Framework 4
Mono 3.4.0 (вытащил и скомпилировал напрямую из git используя make)
XSP Mono.WebServer2 0.2.0.0 (также из git)

Моя монофоническая установка почти точно следует инструкциям из этого ответа. Что происходит, это:

  1. Я создаю новый проект MVC 4 в VS 2012, используя параметры по умолчанию.
  2. Я публикую упомянутое приложение, не меняя настройки "копировать локальную" в указанной DLL, используя профиль публикации файловой системы.
  3. Затем отправьте файлы по FTP на виртуальную машину Ubuntu и скопируйте их в домашнюю папку веб-сайтов (/var/www/mvc, которую я настроил по умолчанию для Apache2).
  4. cd /var/www/mvc в командной строке bash и запустите xsp4,
  5. Нажмите на сервер / порт и получите эту ошибку:

System.InvalidOperationException
Представление 'index' или его мастер не найдены, или ни один механизм представления не поддерживает искомые местоположения. Были найдены следующие места:
~ / Views / Home / index.aspx
~ / Views / Home / Index.ascx
~ / Views / Shared / index.aspx
~ / Views / Shared / Index.ascx
~ / Views / Home / Index.cshtml
~ / Views / Home / Index.vbhtml
~ / Views / Home / Index.cshtml
~ / Views / Home / Index.vbhtml

Описание: HTTP 500. Ошибка обработки запроса.
Подробности: исключение не в сети. Источник исключения (имя приложения или объекта): System.Web.Mvc.
Трассировка стека исключений:

at System.Web.Mvc.ViewResult.FindView(System.Web.Mvc.ControllerContext context) [0x00000] in <filename unknown>:0
at System.Web.Mvc.ViewResultBase.ExecuteResult(System.Web.Mvc.ControllerContext context) [0x00000] in <filename unknown>:0
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(System.Web.Mvc.ControllerContext controllerContext, System.Web.Mvc.ActionResult actionResult) in <filename unknown>:0
at System.Web.Mvc.ControllerActionInvoker+<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17 () [0x00000] in <filename unknown>:0
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, System.Web.Mvc.ResultExecutingContext preContext, System.Func`1 continuation) [0x00000] in <filename unknown>:0

Информация о версии: 3.4.0 (master/830c517 пт 28 февраля 16:03:26 CST 2014); ASP.NET версия: 4.0.30319.17020

Я пробовал различные комбинации компиляции (нацеливание на 4.5 вместо 4.0, используя MVC 3 вместо 4), удалил WebPages.OAuth.dll, скопировал различные ссылочные комбинации и провел исчерпывающий поиск в Интернете... все безрезультатно. Это как-то связано с моей моно версией? XSP? Есть ли окончательное решение этой проблемы?

ОБНОВИТЬ
Если я нацеливаюсь на.NET Framework 4.5 с проектом MVC 4, ошибка изменится на это:

System.IO.FileNotFoundException
Не удалось загрузить файл или сборку 'log4net, Версия =1.2.11.0, Культура = Нейтральная, PublicKeyToken=669e0ddf0bb1aa2a' или одна из ее зависимостей.
Описание: HTTP 500. Ошибка обработки запроса.
Подробности: исключение не в сети. Источник исключения (имя приложения или объекта): DotNetOpenAuth.Core.
Трассировка стека исключений:

at DotNetOpenAuth.Logger.Create(System.String name) [0x00000] in <filename unknown>:0
at DotNetOpenAuth.Logger.CreateWithBanner(System.String name) [0x00000] in <filename unknown>:0
at DotNetOpenAuth.Logger..cctor() [0x00000] in <filename unknown>:0

Я не использую log4net.

1 ответ

Решение

После нескольких дней исследований я узнал несколько вещей, в первую очередь, о том, что Mono 3.x не поддерживается в Ubuntu 12.04.

Итак, о MVC 4 не может быть и речи об этой ОС (и большинстве других ОС Linux, с которыми я сталкивался). Для дальнейшего использования я наконец смог заставить MVC 3 работать на Ubuntu 12.04, выполнив следующие действия:

  1. Установите Ubuntu 12.04 из ISO с помощью виртуальной машины Hyper-V (я с радостью предоставлю подробную информацию об этой настройке, если кто-то захочет их).
  2. Установите все обновления Ubuntu (требуется перезагрузка).
  3. Откройте окно терминала (Ctrl + Alt + T).
  4. (Необязательно) Установите XRDP, который разрешает подключения удаленного рабочего стола к виртуальной машине Ubuntu. Я не выношу окно сервера терминалов по умолчанию для Hyper-V с *nix системами, поскольку сопоставления клавиатуры / мыши глупы.

    sudo apt-get install xrdp

  5. (Необязательно) Использование ifconfig в терминале, чтобы получить IP-адрес виртуальной машины, который вы можете использовать для подключения к удаленному рабочему столу.

  6. Установите Apache2.

    sudo apt-get install apache2

  7. Установите Apache2 с резьбой dev (требуется для XSP4, установленного ниже).

    sudo apt-get install apache2-threaded-dev

  8. Установите Mono-runtime пакет.

    sudo apt-get install mono-runtime

  9. Установите Mono-полный пакет.

    sudo apt-get install mono-complete

  10. Установите XSP4 (это очень легкий веб-сервер, который вы можете использовать для разработки).

    sudo apt-get install mono-xsp4

  11. Установите пакет примеров ASP.NET. Очевидно, что XSP4 не устанавливает все, что ему нужно, но требует, чтобы некоторый набор компонентов ASP.NET был установлен отдельно, чтобы работать.

    sudo apt-get install asp.net-examples

После этого вы можете настроить папку для вашего сайта MVC 3 в /var/www и бин развернуть ваш сайт. Очень важно, чтобы определенные сборки были скопированы в папку вашего сайта, чтобы это работало, а именно:

  • System.Web.Helpers
  • System.Web.Mvc
  • System.Web.Razor
  • System.Web.Routing
  • System.Web.WebPages
  • System.Web.WebPages.Razor
  • System.Web.WebPages.Deployment

Поэтому убедитесь, что они настроены на "копирование локальных" или выясните, где находятся правильные версии в вашей системе Windows, и вручную скопируйте их в папку вашего сайта. Затем вы можете настроить Apache и протестировать свой сайт с помощью XSP4 (опять же, я сообщу подробности, если потребуется):

cd /var/www/sitefolder/
xsp4

Который покажет вам что-то вроде этого:

xsp4
Listening on address: 0.0.0.0
Root directory: /var/www/sitefolder
Listening on port: 8080 (non-secure)
Hit Return to stop the server.

И вы можете попасть на сайт в браузере на виртуальной машине с localhost:8080,

Надеюсь, это поможет кому-то в будущем.

Другие вопросы по тегам