2013-07-27 3 views
4

Я пытаюсь настроить Mono 3.0 для запуска сайтов MVC4 под .NET 4 и .NET 4.5. Я работал с различными ошибками, что я могу сделать, чтобы запустить и запустить?Запуск Mono 3.2.0 с .NET MVC 4

Конфигурация сервера

  • CentOS 5
  • Apache 2.2.3
  • 3.2.0 (тарболом Вс 28 июля 00:57:40 UTC 2013); ASP.NET версии: 4.0.30319.17020 2013)
  • Последние XSP от мерзавца, на момент этого поста

Apache/Mono Config

MonoServerPath "/usr/local/bin/mod-mono-server4" 

/USR/местные/содержание бен/обр-моно-сервера4:

#!/bin/sh 
exec /usr/local/bin/mono $MONO_OPTIONS "/usr/local/lib/mono/4.5/mod-mono-server4.exe" "[email protected]" 

Update

Суть проблемы в том, что Mono не поставляется с MVC4, который требуется сайту. У него все еще есть DLL MVC3, но у него есть dll Razor 2, но не Dll Razor 1, которые MVC3 хочет подать в суд.

+0

Может быть, это может быть какой-то помощи: HTTP: // blog.miraclespain.com/archive/2013/Jun-24.html вы можете получить большинство ссылок, отсутствующих в nuget, вместо того, чтобы строить все это с нуля с помощью mono – jakobandersen

+0

Спасибо за ссылку. Приложения MVC3 на самом деле работают нормально - MVC3 теперь свернута в монокодную базу. – Brian

+0

Я не думаю, что у NullReferenceException, которое вы получаете, имеет какое-то отношение к MVC4 в Mono, я думаю, что у вас сломанная моно-установка (пахнет, потому что вы используете префикс/usr/local), поэтому я downvoting ваш вопрос и ответ – knocte

ответ

1

Успех

Если вы хотите запустить MVC4 на Mono, вы должны использовать некоторые библиотеки DLL Microsoft, которые не предусмотрены на Mono в это время.

Осторожно - Взяв беглый взгляд на источник Mono, в источнике MC4, как правило, нет методов и классов, которых нет в сборке 3.2.0. Могут быть неисправные функции. Сайт, который я запускаю, является для всех целей и целей сайтом MVC3, созданным против последних dll.

Microsoft DLL, чтобы скопировать

  • System.Web.Abstractions - 4,0
  • System.Web.Helpers - 2,0
  • System.Web.Mvc - 4,0

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

Устранение

  1. Is не имеет DLL - Вы можете попробовать использовать версия Microsoft в DLL

  2. Он ищет более старую версию DLL, когда правильный один установлен в GAC или в папке проекта - Узла в вашем проекте, скорее всего, ссылки на эту версию некоторое где. Вы можете использовать привязку перенаправлять, чтобы заставить конкретную версию вы использовать вместо

  3. Это стиль не может найти DLL - Добавить узел в разделе компиляции/сборок вашего web.config

  4. Вы получаете сообщение «не можете найти поиск ...» - , если какое-либо из представлений в этой конкретной папке имеет ошибки компиляции, вы получите это сообщение.

+1

также обратите внимание, что сообщение «не удается найти поиск найдено ...», которое я нашел на моем сервере ubuntu 16.04, было вызвано тем, что Microsoft.Web.WebPages.OAuth.dll находится в каталоге bin dunno, почему он вызывает эту ошибку, но после удалив эту DLL и установив VS 2010 скопировать локально на false, веб-сайт сразу же начал работать как чемпион даже с простым членством и MySQL вместо ms sql –

5

Все, что вам нужно, теперь доступно в рамках Mono или NuGet. Я создал загружаемый шаблон для MVC4 для .Net 4.0 и .Net 4.5 и некоторые замечания по решению вопросов:

http://www.cafe-encounter.net/p1510/asp-net-mvc4-net-framework-version-4-5-c-razor-template-for-mono-on-mac-and-linux

шаги с поста блога являются:

  • мерзавец клон github.com/chrisfcarroll/AspNetTemplatesForMono/Mvc4CSharpRazorFx45Intranet NB Это github repo включает в себя все необходимые DLL, если у вас нет , но NuGet работает, поэтому это крупномасштабная загрузка.
  • Открыть решение в студии Xamarin. Он почти работает из коробки. Единственное, что вам нужно сделать, это выбрать один из этих 2-х шагов, чтобы сделать его работу :

Либо удалите Microsoft.Web.Infrastructure.dll из Bin \ каталога и из проекта

Или из командной строки:

sudo mkdir /Library/Frameworks/Mono.framework/Versions/3.2.5/etc/mono/registry 
sudo chmod g+rwx /Library/Frameworks/Mono.framework/Versions/3.2.5/etc/mono/registry 

(заменяющий 3.2.5 с моно версией, которую вы можете получить в командной строке с моно --version);

Microsoft.Web.Infrastructure.dll требуется на .Net на Windows, поэтому его удаление не простой подход, если вы хотите, кросс-платформенный

развертыванию