پروژه دیگری از آقای
David Ebbo (عضو تیم ASP.NET که پیشتر با پروژه
T4 MVC آن در این سایت آشنا شدهاید)، جهت کامپایل کامل فایلهای View و ارائه پروژه نهایی ASP.NET MVC بدون نیاز به ارائه پوشه Views آن به نام Razor Generator وجود دارد که در ادامه خلاصهای از نحوه استفاده از آنرا مرور خواهیم کرد.
الف) ابتدا افزونه Razor Generator را
از اینجا دریافت و نصب کنید.
ب) سپس به پروژه MVC خود بسته NuGet زیر را اضافه نمائید:
PM> Install-Package RazorGenerator.Mvc
در این حالت باید پروژه پیش فرض، همان وب سایت MVC شما انتخاب گردد:
با اضافه کردن این بسته NuGet تغییرات زیر به پروژه جاری اعمال خواهند شد:
- ارجاعی به اسمبلی RazorGenerator.Mvc.dll به پروژه اضافه خواهد شد.
- در پوشه App_Start، فایلی به نام RazorGeneratorMvcStart.cs اضافه گردیده و کار تنظیم موتور View مخصوص کار با Viewهای کامپایل شده را انجام میدهد.
ج) پس از نصب بسته NuGet یاد شده در همان خط فرمان پاورشل نوگت دستور زیر را صادر کنید:
PM> Enable-RazorGenerator
و ... همین!
پس از انجام اینکار، دو کار صورت خواهد گرفت:
- برای تمام Viewهای برنامه، فایل cs متناظری تولید میشود که ذیل فایلهای View قابل مشاهده است.
- گزینه Custom tool این Viewها نیز به RazorGenerator تنظیم میشود.
بدیهی است اگر از دستور Enable-RazorGenerator استفاده نکنید، نیاز خواهید داشت تا تنظیم گزینه Custom tool به RazorGenerator کلیه Viewها را دستی انجام داده و اگر فایل cs متناظر با View تولید نشد روی فایل view کلیک راست کرده و گزینه run custom tool را انتخاب کنید. اما دستور Enable-RazorGenerator کار را بسیار ساده میکند.
مزایا:
- در عمل موتور ASP.NET همین کارها را در زمان اولین بار اجرای Viewها(ی کامپایل نشده) در پشت صحنه انجام میدهد. بنابراین با این روش زمان آغاز برنامه سریعتر میشود.
- دیگر نیازی به توزیع فایلهای cshtml نخواهید داشت.
- خطایابی Viewها نیز سادهتر میشود. از این جهت که کامپایل آنها به زمان اجرا موکول نخواهد شد.
یک سری قابلیتهای دیگر نیز به همراه این پروژه است مانند انتقال Viewها به یک اسمبلی دیگر و یا استفاده از MSBuild برای انجام عملیات که میتوانید آنها را در
Wiki پروژه Razor Generator مطالعه کنید. انتقال Viewها به یک اسمبلی دیگر هرچند در این روش کاملا ممکن شده و کار میکند اما صفحه dialog افزودن یک view جدید مهیا در کلیک راست بر روی اکشن متدهای یک کنترلر را غیرفعال میکند که در عمل آنچنان جالب نیست.
یک نکته مهم:
اگر در آینده بسته NuGet و افزونه یاد شده را به روز کردید نیاز است دستور زیر را اجرا کنید:
به این ترتیب بر اساس ساختار و کدهای جدید RazorGenerator، کلیه فایلهای cs تولید شده مجددا به روز و تولید خواهند شد.
فایلهای Helper قرار گرفته در پوشه App_Code
اگر HTML Helperهای خود را توسط فایلهای Razor قرار گرفته در پوشه App_Code تولید میکنید، پس از اجرای دستور Enable-RazorGenerator، برای این موارد نیز فایلهای cs متناظری تولید میشود. با این تفاوت که Build Action آنها بر روی Compile
قرار ندارند که این مورد را باید دستی تنظیم کنید. همچنین حین استفاده از این توابع کمکی نیاز است فضای نام مرتبط را نیز در ابتدای فایل View خود ذکر کنید مثلا:
@using MvcViewGenTest2.app_code
البته با استفاده از Razor Generaor دیگر نیازی به استفاده از پوشه App_Code نخواهد بود؛ از این جهت که کار کامپایل خودکار، به زمان اجرا موکول نخواهد شد. بنابراین اینبار در هر جایی که علاقمند بودید میتوانید این فایلهای کمکی را تولید و کامپایل کنید. فقط ذکر فضای نام مرتبط را در ابتدای View خود فراموش نکنید.
حذف فایل RazorGeneratorMvcStart.cs
اگر علاقمند به استفاده از فایل پیش فرض RazorGeneratorMvcStart.cs نیستید و میخواهید
موتورهای View اضافی را حذف کنید، ابتدا فایل RazorGeneratorMvcStart.cs را حذف کرده و سپس در فایل global.asax.cs تغییر زیر را اعمال نمائید:
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.WebPages;
using RazorGenerator.Mvc;
namespace MvcViewGenTest2
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
// Adding PrecompiledMvcEngine
var engine = new PrecompiledMvcEngine(typeof(MvcApplication).Assembly);
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(engine);
VirtualPathFactoryManager.RegisterVirtualPathFactory(engine);
}
}
}