zoukankan      html  css  js  c++  java
  • CodeSmith Merge策略--小白教程

        为了让 自动产生的代码 和 程序员手写的代码 互不干涉, 提出了Merge策略, 包括以下三种

    InsertRegion: 只插入(覆盖)到指定 #region区域
    InsertClass: 覆盖class, 我没试过
    PreserveRegions: 对某些符合正则表达式的 #region区域, 不覆盖

    下面是我的操作流程(使用 CodeSmith Generator 7 的 TemplateEditor.exe), 大家参考一下吧

    1. 要使用Merge策略, 就必须使用 CodeSmith Generator Project(代码生成项目), 在My Templates文件夹上右击  -->  New  --> CodeSmith Generator Project, 命名为mergeTest.csp 吧

    image

    2. 然后创建一个CSharp模板, 比如merge1.cst, 功能很简单, 就是输出两个变量

    <%@ Template Language="C#" TargetLanguage="C#" %>
    <%@ Property Name="SampleStringProperty" Default="SomeValue" Type="System.String" %>
    <%@ Property Name="SampleBooleanProperty" Default="True" Type="System.Boolean" %>
    SampleStringProperty= <%= SampleStringProperty %>
    SampleBooleanProperty= <%= SampleBooleanProperty %>

    3. 准备一个含有手写代码的目标文件, 命名成merge1.cs, 里面 #region output_here 就是要覆盖的区域

    把这个文件就放在 My Templates文件里面, 但你并不会马上从Template Explorer里看到, 重启 CodeSmith就可以看见了

    //这些区域不会被覆盖
    
    #region output_here
    //这里面填写什么, 都会被覆盖掉
    #endregion
    
    //这些区域也不会被覆盖

    4. 右击mergeTest.csp --> Add Output:

    Template选择 merge1.cst
    File就是要覆盖的文件, 选择刚才创建的merge1.cs
    Merge里的 Type 这次选 InsertRegion
    下面的Initialization string, 没找到帮助文档, 照着例子写, RegionName=output_here, 表示要覆盖的region叫output_here

    image

    5. 右击mergeTest.csp -->Generate Outputs, 就开始执行mergeTest.csp项目里面的各种输出模板了

    6. 再次双击merge1.cs 就可以看到结果了

    //这些区域不会被覆盖
    
    #region output_here
    SampleStringProperty= SomeValue
    SampleBooleanProperty= True
    
    #endregion
    
    //这些区域也不会被覆盖

    至于Merge策略PreserveRegions, 主要的难点还是Initialization string
    比如CodeSmith Generator 7.0 Samples --> Examples  --> Merge --> CSharp 里PreserveRegionsSample.cst就是
    RegionNameRegex=^[ ]*[ s]*"?(?i:Custom)"?;
    意思在 新一行里找到含有Custom这个关键字的region, 就不要覆盖

  • 相关阅读:
    Java Web项目开发中常见路径获取方法
    Genymotion模拟器连接不上开发服务器解决办法
    百度鹰眼轨迹管理台部署到本地或者服务器上
    解决Hibernate4执行update操作,不更新数据的问题
    后台发送http请求通用方法,包括get和post
    Java后端发出post请求带参数并接收返回的json
    $.ajax()方法详解
    常见异常及解决办法
    jQuery通过地址获取经纬度demo
    python 导入模块与使用
  • 原文地址:https://www.cnblogs.com/zhouandke/p/5894668.html
Copyright © 2011-2022 走看看