ASP.NET MVC 5.2のメモ(Linux)
MonoDevelopは4.0、Monoは3.2.8をインストール。
デフォルトではMVC 3のプロジェクトテンプレートが入っているから、まずはそれを選んでプロジェクトを作る。
ところがプロジェクトを作るときになぜかエラーが。
System.IO.FileNotFoundException: Could not find file "/usr/lib/monodevelop/AddIns/MonoDevelop.AspNet.Mvc/Templates/Common/Index.cshtml".
同じ現象が起きてる人を見つけた。回答には「MonoDevelopをソースからビルドしろ」とあったが、面倒だったのでGitHubの当該ブランチから足りてなさげなテンプレートファイルを取ってきた。そしたらプロジェクトの作成時にはエラーが出なくなった。
しかし問題はまだあり、ビルドすると警告が出るし、実行するとFileNotFoundExceptionになる。
プロジェクトをよく見たら、参照アセンブリが見つかっていない。
こちらも同じ現象が起きてる人を見つけた。こっちの回答も自分でビルドしろとか言ってる。えー。
そこで慌てず騒がずNuGet Addinをインストールする。
そしてもういっそのことASP.NET MVC 5.2を入れることにする。
そしたらアセンブリ参照の警告はなくなったが、実行するとまだエラーになる。今度はInvalidOperationExceptionだ。
Web.config
を見ると、Web Pagesのバージョンが1.0になっていたので、3.0に手で直す。
<appSettings> <!-- add key="webpages:Version" value="1.0.0.0" / --> <add key="webpages:Version" value="3.0.0.0" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings>
これでもまだInvalidOperationExceptionが出る。ただしエラーメッセージはさっきとは違う。
Views/Web.config
を見ると、MVC 3の指定が残っていたので、5.2に変える。
<system.web.webPages.razor> <!-- host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" / --> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> </namespaces> </pages> </system.web.webPages.razor>
これでやっとASP.NET MVCが動いた。