关于CodeSmith的一些问题

时间:2011-05-13 11:18:26

标签: templates code-generation codesmith

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

  1. 如何设置文本块 (功能)选择用户?
  2. 如何单独移动块 文件?
  3. 例如,有一个模板

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

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

    P.S。抱歉我的英语不好。

2 个答案:

答案 0 :(得分:0)

您可以使用字符串属性来设置模板或生成值的名称。然后你只需在生成时间内渲染这个字符串内容。

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

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

答案 1 :(得分:-2)

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

在你的情况下,我将构建一个名为cs_class的原子模板:

模板的执行代码将是:

code([[
using System;

public class Hello3
{
   public static void Main(string[] args)
   {
     {{code_blocks}}
   }
}
]])

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

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

对于管理部门:

under("cs_class")

对于Exec部分:

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

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

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

我知道这是一个非常简单的例子,说明你可以用AtomWeaver构建什么,但它只是让你快速了解你可以完成的任务。