14-CodeSmith 调试

调试 CodeSmith 模板

编写 CodeSmith 模板和编写程序一样,也需要进行调试,CodeSmith 支持使用 CLR’s Just-in-Time debugger 调试模板。

要调试模板,首先要在 CodeTemplate 声明中打开调试 Debug="True"

<%@ CodeTemplate Language="C#" TargetLanguage="C#" Debug="True" %>Code language: HTML, XML (xml)

第二步是设置断点:在需要设置断点的方法调用 System.Diagnostics.Debugger.Break();

System.Diagnostics.Debugger.Launch();
System.Diagnostics.Debugger.Break();Code language: CSS (css)

全部代码

<%-- 
Name: ASP.Net Samples
Author: Blake Niemyjski
Description: The following template will generate a default default ASP.Net page.
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="ASPX" Description="The following template will generate a default default ASP.Net page." OutputType="Normal" Debug="True"%>

<%--声明数据库的参数,在左下角的Database属性中,选择要操作的数据库名称--%>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Optional="True" Category="Context" Description="Table to get the data from." %>

<%--引入下面的类库,操作数据库必备的。不要纠结加入就行啦。--%>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>

<%--引入system类型转为c#的数据类型的映射字典 --%>
<%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %>

<%
System.Diagnostics.Debugger.Launch();
System.Diagnostics.Debugger.Break();
%>

<%--遍历数据库表的字段属性--%>
<% foreach (ColumnSchema column in this.SourceTable.Columns) {  %>
<%--拼接字符串,输出c#中实体的属性--%>
public <%= ControlType(CSharpAlias[column.SystemType.FullName]) %> <%= column.Name %>{ get; set; }

<% } %>

<script runat="template">
 //如果类型为int,或datetime类型输出可空类型
 public string ControlType(object val)
 {
     var ty=val.ToString();
     if(ty=="int")
     {
         return "int?";
     }
     if(ty=="System.DateTime")
     {
         return "System.DateTime?";
     }
     return ty;
 }
</script>Code language: HTML, XML (xml)

之后会打开 Visual Studio 来进行调试。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注