平々毎々(アーカイブ)

はてなダイアリーのアーカイブです。

ASP.NET MVC 5.2のメモ(Linux)

MonoDevelopは4.0Monoは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が動いた。