VS和一些T4编辑器虽然给了基本的智能感知支持,但是在绝大部分我们相当于在编写纯文本的脚本,所以对于一些比较复杂的模板转换逻辑,我们需要通过Debug的方式去发现一些无法避免的问题。
1、要进行调试首先需要在<#@ template…#>指令中将debug属性设置为true;
<#@ template language="C#" debug="true" hostspecific="true"#>
2、然后在需要设置断点的行前插入
System.Diagnostics.Debugger.Launch();
3、如果在同一个T4模板中已经插入了System.Diagnostics.Debugger.Launch(); 那么在后面需要设置断点时需要使用
System.Diagnostics.Debugger.Break();
<#@ template language="C#" debug="true" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#>
<#@ output extension=".cs"#>
<#@ assembly name="JAP.Design\Jinher.JAP.DevTool.APPLibrary.dll" #>
<#@ import namespace = "System.Collections.Generic" #>
<#@ import namespace = "System.Linq" #>
<#@ import namespace = "Jinher.JAP.DevTool.APPLibrary.Common" #>
<#@ import namespace = "Microsoft.VisualStudio.TextTemplating" #>
<#
System.Diagnostics.Debugger.Launch();
ITextTemplatingEngineHost h = Host;
string NameSpaceHeader = h.ResolveParameterValue("Facade","Interface","NameSpaceHeader");
string BizName = h.ResolveParameterValue("Facade","Interface","BizName");
string IServiceName = h.ResolveParameterValue("Facade","Interface","IServiceName");
string ClassName= h.ResolveParameterValue("Facade","Interface","ClassName");
string InterfaceType = h.ResolveParameterValue("Facade","Interface","InterfaceType");
string FunctionList = h.ResolveParameterValue("Facade","Interface","FunctionList");
System.Diagnostics.Debugger.Break();
List<string> strFunctionList = FunctionList.Split('|').ToList();
#>