サンプルではなく、実際に ASP.NET Core MVC アプリケーションを開発する人が選ぶと思われる認証なしテンプレートでは、Visual Studio でのスキャフォールディングに必要なパッケージが追加されません。
私は基本的に認証なしを選んで作っていくタイプなので、完全にはまりました。
スキャフォールディングが使えないと、ビューを作るのが本当に大変なので辛いです。
実際に認証なしを選んでプロジェクトを作成すると、ソリューションエクスプローラのコンテキストメニューに何も出てきません。
認証なし以外のテンプレートを選んで作成すると、今まで通りにスキャフォールディングの項目が表示されます。Visual Studio でスキャフォールディングが使えると安心感がありますね。
違いは project.json だけなので、認証なしを選んでいてもパッケージをいくつか追加すると、スキャフォールディングを有効にすることが出来ます。具体的には以下の二つのパッケージを追加します。
- Microsoft.VisualStudio.Web.CodeGeneration.Tools
- Microsoft.VisualStudio.Web.CodeGenerators.Mvc
ただし、この二つはビルド時のみ必要な依存関係なので、type = build を設定しておきます。あと Visual Studio から認識させるために tools にも追記しないといけないので、project.json をそのまま載せます。
{ "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.1", "type": "platform" }, "Microsoft.AspNetCore.Diagnostics": "1.0.0", "Microsoft.AspNetCore.Mvc": "1.0.1", "Microsoft.AspNetCore.Razor.Tools": { "version": "1.0.0-preview2-final", "type": "build" }, "Microsoft.AspNetCore.Routing": "1.0.1", "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0", "Microsoft.AspNetCore.Server.Kestrel": "1.0.1", "Microsoft.AspNetCore.StaticFiles": "1.0.0", "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", "Microsoft.Extensions.Configuration.Json": "1.0.0", "Microsoft.Extensions.Logging": "1.0.0", "Microsoft.Extensions.Logging.Console": "1.0.0", "Microsoft.Extensions.Logging.Debug": "1.0.0", "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0", "Microsoft.VisualStudio.Web.CodeGeneration.Tools": { "version": "1.0.0-preview2-final", "type": "build" }, "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": { "version": "1.0.0-preview2-final", "type": "build" } }, "tools": { "BundlerMinifier.Core": "2.0.238", "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final", "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final", "Microsoft.VisualStudio.Web.CodeGeneration.Tools": { "version": "1.0.0-preview2-final", "imports": [ "portable-net45+win8" ] } } }
ちょっとめんどくさいですけど dependencies の type については、Microsoft.NETCore.App を NuGet で単純にアップデートした時に悩むポイントなので、覚えておいてもいい気がしました。
保存してパッケージの復元が終わるとスキャフォールディングが使えるようになります。
これでめでたしと行きたいところですが、今のバージョンのスキャフォールディングには保存時に UTF-8 にならないので、実行時に文字化けするという問題があります。割と毎度のことですが、生成されるファイルに BOM が付いていないのが原因です。*1
スキャフォールディングについても GitHub でコードが公開されているので、Issue を投げておきましたが間違った修正をされてしまったみたいで、結局まだ直っていないという話でした。
*1:そもそも UTF-8 には BOM は要らないという話ですけど、Visual Studio の仕様なので仕方ない