실제로 런타임에 컴파일됩니다.
C:\Windows\Microsoft.NET\Framework64\<version>\Temporary ASP.NET Files\<app>\
또한 귀하의 의견에 오류를 감지 할 수있는 프로젝트의 나머지와 함께 컴파일을 활성화 할 수 있습니다 : 당신은 컴파일 된 웹 형태로 배치되어 같은 장소에서 생성 된 코드 파일 및 임시 DLL을 찾을 수 있습니다. 참조 : Can Razor views be compiled?. 이것은 (내 경험으로) 솔루션의 컴파일 시간을 증가 시키지만, 런타임까지는 눈에 띄지 않는 오류를 감지하는 데는 좋습니다. 필요할 때 스위치를 켭니다.
면도기 파서/생성기 코드는 System.Web.Razor 프로젝트/어셈블리에 포함되어 있습니다 (MVC 소스의 일부로 사용 가능). 최종 결과는 C# 클래스이므로 C# 컴파일러는 다른 클래스와 마찬가지로 처리 할 것입니다.
보기 용으로 생성 된 코드는 다음과 같습니다 (내 프로젝트 중 하나의 "재설정 암호"페이지에서 발췌 한 것).
namespace ASP {
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Helpers;
using System.Web.Security;
using System.Web.UI;
using System.Web.WebPages;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using System.Web.Mvc.Html;
using System.Web.Routing;
public class _Page_Areas_Anonymous_Views_Home_ResetPassword_cshtml : System.Web.Mvc.WebViewPage<Web.UI.Areas.Anonymous.ResetPasswordViewModel> {
#line hidden
public _Page_Areas_Anonymous_Views_Home_ResetPassword_cshtml() {
}
protected ASP.global_asax ApplicationInstance {
get {
return ((ASP.global_asax)(Context.ApplicationInstance));
}
}
public override void Execute() {
const string title = "Reset Password";
ViewBag.Title = title;
BeginContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 302, 63, true);
WriteLiteral("</h1>\r\n </div>\r\n </div>\r\n </div>\r\n <div");
EndContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 302, 63, true);
BeginContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 365, 12, true);
WriteLiteral(" class=\"two\"");
EndContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 365, 12, true);
BeginContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 377, 15, true);
WriteLiteral(">\r\n <div");
EndContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 377, 15, true);
BeginContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 392, 19, true);
WriteLiteral(" class=\"banner-box\"");
EndContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 392, 19, true);
BeginContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 411, 5, true);
WriteLiteral(">\r\n\r\n");
#line default
#line hidden
using(@Html.BeginForm("ResetPassword", "Home", FormMethod.Post, new { id = "main-form" }))
{
Write(Html.ValidationSummary());
// etc. etc. Even simple views result in a large code file
사실, dll은 JIT 컴파일 프로세스의 결과로 생성됩니다. 아무것도 메모리에 캐시되지 않습니다. –