我如何调试mvc脚手架文本模板文件
本文关键字:文本 脚手架 文件 mvc 何调试 调试 | 更新日期: 2023-09-27 18:12:01
我添加自定义脚手架文件作为CustomCreate。在mvc添加视图对话框中,当我在对话框中选择自定义模板时,我有一个错误。我如何调试我的文本模板文件?
如果您使用的是Visual Studio 可以尝试以下操作:
- 包含系统。.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模板上运行调试器,只需在解决方案资源管理器中右键单击它并从上下文菜单中选择Debug T4 template 。
以下文章也将帮助您解决常见的T4问题:调试T4文本模板
注意,这只适用于VS2012及更高版本。因此,我提到的第一种方法将适用于使用旧版本Visual Studio的开发人员。
- 包含系统。.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模板上运行调试器,只需在解决方案资源管理器中右键单击它并从上下文菜单中选择Debug T4 template 。以下文章也将帮助您解决常见的T4问题:调试T4文本模板
注意,这只适用于VS2012及更高版本。因此,我提到的第一种方法将适用于使用旧版本Visual Studio的开发人员。