【问题标题】:A few questions about CodeSmith关于 CodeSmith 的几个问题
【发布时间】:2011-08-24 20:51:04
【问题描述】:

我最近开始学习 CodeSmith,我有几个问题。 我想制作一个有 4 个块的模板。 每个区块将由用户选择。

  1. 如何设置文本块 (功能)选择用户?
  2. 如何单独移动块 文件?

例如有一个模板

using System;

public class Hello3
{
   public static void Main(string[] args)
   {
    Blocl 1
    Blocl 2
    Blocl 3
    Blocl 4
   }
}

这些块中的每一个都应该由用户选择。每个块都存储在一个单独的文件中。 每个块都是一个函数。一个块的输出进入另一个块的输入。

附:对不起我的英语不好。

【问题讨论】:

    标签: templates code-generation codesmith


    【解决方案1】:

    您可以使用字符串属性来设置模板的名称或生成的值。然后,您只需在生成期间呈现此字符串内容。

    另一种选择是创建一个命名不同代码块的枚举。然后在您的模板中,您可以render a sub template 或返回一些静态文本。

    您还可以创建一个自定义下拉列表,让您选择 CodeSmith 模板。所有这些逻辑都需要在UITypeEditor 中发生,并且您需要返回CodeTemplate using the API。这比第一种或第二种选择要困难得多。

    【讨论】:

    • CodeTemplate GetCodeTemplateInstance(string templatePath)CodeTemplate 类上。工作方式类似于 Page.LoadControl(string) 在网络表单中工作。
    【解决方案2】:

    我不知道如何使用 CodeSmith 来做到这一点,但您最好使用“构建块”方法。 AtomWeaver 提供了一种通过称为“原子”的较小部分构建代码生成器的方法。这些 Atom 是可以组合在一起的模板。

    在你的情况下,我会构建一个名为 cs_class 的 Atom 模板:

    模板的执行代码是:

    code([[
    using System;
    
    public class Hello3
    {
       public static void Main(string[] args)
       {
         {{code_blocks}}
       }
    }
    ]])
    

    注意 {{code_blocks}} 标记。另一个模板会放一些代码。

    然后,创建 cs_code_block Atom 模板。使用此代码:

    对于管理部分:

    under("cs_class")
    

    对于执行部分:

    cursor("code_blocks")
    code([[
      <put user code here>
    ]])
    

    under() 命令可帮助您在 AtomWeaver 中构建交互式建模环境。现在,您的用户可以使用一个 cs_class Atom 创建模型,然后他可以添加任意数量的 cs_code_block Atom。执行模型将生成所需的代码。

    AtomWeaver 可让您改进模型和代码生成器。从几行开始很容易,然后将其扩展以获得完整的生成器。

    我知道这是一个非常非常简单的示例,说明您可以使用 AtomWeaver 构建什么,但这只是为了让您快速了解您可以完成什么。

    【讨论】:

    • 答案与 OP 的技术无关
    猜你喜欢
    • 2011-05-12
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多