Те наистина се компилират по време на изпълнение. Можете да намерите генериран кодов файл и временни DLL файлове на същото място, където са поставени компилираните уеб формуляри:
C:\Windows\Microsoft.NET\Framework64\<version>\Temporary ASP.NET Files\<app>\
Можете също така да активирате компилация заедно с останалата част от проекта, за да откриете грешки във вашите изгледи. Вижте: Могат ли да се компилират изгледи на Razor?. Това ще увеличи времето за компилиране на решението (според моя опит), но е чудесно за откриване на грешки, които биха останали незабелязани до момента на изпълнение. Включвам го при нужда.
Кодът на анализатора/генератора на Razor се съдържа в проекта/сглобката 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
person
Tim Medora
schedule
28.09.2013