Exécution de Mono 3.2.0 avec .NET MVC 4

J’essaie d’obtenir l’installation de Mono 3.0 pour exécuter les sites MVC4 sous .NET 4 et .NET 4.5. J’ai travaillé avec différentes erreurs, que puis-je faire pour le mettre en place?

Configuration du serveur

  • CentOS 5
  • Apache 2.2.3
  • 3.2.0 (tarball le 28 juillet 00:57:40 UTC 2013); Version ASP.NET: 4.0.30319.17020 2013)
  • Le dernier XSP de git, au moment de ce post

Apache / Mono Config

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

/ usr / local / bin / mod-mono-server4 contenu:

 #!/bin/sh exec /usr/local/bin/mono $MONO_OPTIONS "/usr/local/lib/mono/4.5/mod-mono-server4.exe" "$@" 

Mettre à jour

Le nœud du problème est que Mono ne fournit pas MVC4 dont le site a besoin. Il a toujours les DLLs MVC3, pourtant il a les DLLs Razor 2 mais pas les DLLs Razor 1 que MVC3 veut poursuivre.

Tout ce dont vous avez besoin est maintenant disponible dans le cadre Mono ou sur NuGet. J’ai créé un modèle téléchargeable pour MVC4 pour .Net 4.0 et .Net 4.5 et quelques remarques sur la résolution des problèmes:

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

Les étapes de l’article de blog sont les suivantes:

  • NB: Ce repository github comprend tous les fichiers dll requirejs au cas où vous ne disposiez pas de NuGet, ce qui en fait un téléchargement surdimensionné.
  • Ouvrez la solution dans Xamarin Studio. Cela fonctionne presque complètement. La seule chose à faire est de choisir l’une de ces 2 étapes pour que cela fonctionne:

Supprimez Microsoft.Web.Infrastructure.dll du répertoire bin \ et du projet

Ou, à partir de la ligne de commande:

 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 

(remplacer 3.2.5 par votre version mono, que vous obtenez en ligne de commande avec mono – version);

Le fichier Microsoft.Web.Infrastructure.dll est requirejs sur .Net sous Windows. Par conséquent, la suppression n’est pas la solution la plus simple si vous souhaitez déployer plusieurs plates-formes.

Succès

Si vous souhaitez exécuter MVC4 sur Mono, vous devez utiliser des DLL Microsoft qui ne sont pas fournis par Mono pour le moment.

Un mot d’avertissement – En jetant un coup d’oeil à la source Mono, il semble y avoir des méthodes et des classes dans la source MC4 qui n’existent pas dans la version 3.2.0. Il peut y avoir des fonctionnalités qui sont cassées. Le site que je gère est à toutes fins utiles un site MVC3 construit contre les dernières DLL.

DLL Microsoft à copier

  • System.Web.Abstractions – 4.0
  • System.Web.Helpers – 2.0
  • System.Web.Mvc – 4.0

Une fois que vous avez copié les dll, si vous avez toujours des problèmes, vous devrez peut-être faire un travail de détective si la solution ci-dessus ne fonctionne pas. Si vous obtenez un message d’erreur indiquant que Mono ne peut pas trouver la DLL, c’est généralement l’une des trois raisons suivantes:

Dépannage

  1. Is n’a pas le dll – Vous pouvez essayer d’utiliser la version Microsoft de la DLL

  2. Il recherche une version antérieure de la DLL lorsque la version correcte est installée dans le GAC ou dans votre dossier de projet. Un assembly de votre projet fait probablement référence à cette version quelque part. Vous pouvez utiliser une redirection directe pour forcer la version spécifique que vous avez utilisée à la place

  3. Il ne peut toujours pas trouver le dll – Ajouter l’assembly dans la section compilation / assemblies de votre web.config

  4. Vous obtenez un message “Impossible de trouver la vue recherchée …” – si l’une des vues de ce dossier de vues particulier contient des erreurs de compilation, vous recevrez ce message.