かみそりを既存のプロジェクトのデフォルトのビューエンジンにする方法について受け入れられた答えは、話の半分しか伝えていません。
質問で確立したように(プロジェクトにはかみそりのビューがあります)、このロジックを開始するには、プロジェクトにフォルダーが必要であることが~/Views
わかりました。この場合、すべてのMVCに領域を使用しています。 4つ以上のコードなので、わざわざ~/Views
フォルダを作成する必要はありませんでした。
Asp.Net MVC VS拡張機能の[ビューの追加]ダイアログを反映しました- Microsoft.VisualStudio.Web.Mvc.UserInterface.MvcAddViewDialog.Init
メソッド(このコードの分析からのコメントを追加しました)に、ダイアログが最初に表示されたときにデフォルトのビューエンジンを選択するコードがあります:
//find the project's Views folder
ProjectItem viewsFolder = MvcProjectUtil.GetViewsFolder(this.Project);
//if not found, or if a view engine is already cached then skip this
if (viewsFolder != null && string.IsNullOrWhiteSpace(viewEngineName))
{
//has razor views?
bool flag = false;
//has webforms views?
bool flag2 = false;
//scan all folders and files in the project, looking at all file extensions
//if .cshtml or .vbhtml are found, then flag==true
//if .aspx are found, then flag2 == true
//both can be true when this method returns.
this.GetViewTypes(viewsFolder.ProjectItems, ref flag, ref flag2);
//if there's at least one razor view, or if there are no webforms views
if (flag || !flag2)
{
//assign either C# or VB razor view type
viewEngineName = ((this.Project.Kind ==
"{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") ? "VBHTML" : "CSHTML");
}
}
//this'll get bound in the combo on the dialog
this.ViewEngineName = viewEngineName;
ご覧のとおり、ビュータイプのスキャンは~/Views
フォルダに対してのみ実行されます。つまり、領域を探す必要はありません。
空の~/Views
フォルダーを追加するだけで(ただし、このためにWeb.Configをコピーして404ハンドラーを追加しました)、プロジェクトの次のリロード時に、ドロップダウンでRazorが自動選択されました。これは、前述のSOで受け入れられた回答に正しく記載されているように、かみそりのビューが見つかった場合、またはそのフォルダーにWebフォームのビューが見つからなかった場合にRazorが使用されるためです。