Я добавляю пользовательский файл лесов как CustomCreate.tt. В диалоговом окне добавления представления mvc, когда я выбираю свой пользовательский шаблон в диалоговом окне, у меня возникает ошибка. Как я могу отлаживать свой текстовый файл шаблона?
Как я могу отладить файл текстового шаблона mvc scaffolding?
Ответы (1)
Если вы используете версию Visual Studio ‹ VS 2012
Вы можете попробовать следующее:
- Включите пространство имен System.Diagnostics в файл .tt (
<#@ import namespace="System.Diagnostics" #>
) - Поместите try-catch вокруг кода, который вы пытаетесь сгенерировать, и выведите все исключения в
Trace.TraceError
- Если при запуске шаблона возникает ошибка, сведения об ошибке должны появиться в окне консоли Visual Studio.
В качестве примера вы можете посмотреть на следующее:
<#@ template language="C#" HostSpecific="True" #>
<#@ output extension="cs" #>
<#@ import namespace="System" #>
<#@ parameter type="System.String" name="ControllerName" #>
<#@ parameter type="System.String" name="ControllerRootName" #>
<#@ parameter type="System.String" name="Namespace" #>
<#@ parameter type="System.String" name="AreaName" #>
<#@ import namespace="System.Diagnostics" #>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
<# try{ #>
namespace <#= Namespace #>
{
public class <#= ControllerName #> : Controller
{
//
// GET: <#= (!String.IsNullOrEmpty(AreaName)) ? ("/" + AreaName) : String.Empty #>/<#= ControllerRootName #>/
public ActionResult Index()
{
return View();
}
//
// GET: <#= (!String.IsNullOrEmpty(AreaName)) ? ("/" + AreaName) : String.Empty #>/<#= ControllerRootName #>/Details/5
public ActionResult Details(int id)
{
return View();
}
//
// GET: <#= (!String.IsNullOrEmpty(AreaName)) ? ("/" + AreaName) : String.Empty #>/<#= ControllerRootName #>/Create
public ActionResult Create()
{
return View();
}
//
// POST: <#= (!String.IsNullOrEmpty(AreaName)) ? ("/" + AreaName) : String.Empty #>/<#= ControllerRootName #>/Create
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
//
// GET: <#= (!String.IsNullOrEmpty(AreaName)) ? ("/" + AreaName) : String.Empty #>/<#= ControllerRootName #>/Edit/5
public ActionResult Edit(int id)
{
return View();
}
//
// POST: <#= (!String.IsNullOrEmpty(AreaName)) ? ("/" + AreaName) : String.Empty #>/<#= ControllerRootName #>/Edit/5
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
try
{
// TODO: Add update logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
//
// GET: <#= (!String.IsNullOrEmpty(AreaName)) ? ("/" + AreaName) : String.Empty #>/<#= ControllerRootName #>/Delete/5
public ActionResult Delete(int id)
{
return View();
}
//
// POST: <#= (!String.IsNullOrEmpty(AreaName)) ? ("/" + AreaName) : String.Empty #>/<#= ControllerRootName #>/Delete/5
[HttpPost]
public ActionResult Delete(int id, FormCollection collection)
{
try
{
// TODO: Add delete logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
}
<# }
catch(Exception e)
{
Trace.TraceError(e.ToString());
throw;
}
#>
Обратите внимание, что блок try-catch окружает весь код шаблона для класса.
Если вы используете версию Visual Studio ›= VS 2012
Лучший способ отладки шаблона T4 — добавить точки останова, как в обычном коде CSharp и VB. Чтобы запустить отладчик в шаблоне T4, просто щелкните его правой кнопкой мыши в обозревателе решений и выберите Отладить шаблон T4 в контекстном меню.
Следующая статья также поможет вам решить распространенные проблемы T4: Отладка текстового шаблона T4.
Обратите внимание, что это доступно только для VS2012 и выше. Таким образом, первый упомянутый мной метод подойдет разработчикам, использующим более старые версии Visual Studio.
person
CShark
schedule
09.07.2014
когда я получил ошибку при создании пользовательского представления. Страница ошибки показывает мне исключение ... Я хочу установить точку останова в моем CustomCreate.tt и проверить мои коды
- person M.Azad; 09.07.2014
@ M.Azad См. обновленный ответ. То, что вы хотите сделать, возможно только в Visual Studio 2012 или более поздней версии. Если вы используете более старую версию, я бы посоветовал вам использовать Trace.TraceInformation для отображения значения переменных в определенных точках вашего кода.
- person CShark; 09.07.2014
@ M.Azad Удалось ли вам отладить шаблон T4?
- person CShark; 10.07.2014