2011-05-13 81 views
0

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

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

例如有一个模板

using System; 

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

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

P.S.对不起,我的英语不好。

回答

-2

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

在你的情况,我将建立一个Atom模板称为cs_class:

模板的Exec的代码如下:

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> 
]]) 

下()命令可以帮助您建立在AtomWeaver一个互动的建模环境。现在,你的用户可以用一个cs_class Atom创建一个模型,然后他可以按照他的意愿添加尽可能多的cs_code_block Atoms。执行模型将生成所需的代码。

AtomWeaver可让您演变您的模型和代码生成器。从几条线开始,然后增长以获得完整的发电机很容易。

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

+0

回答不与OP的技术相关 – JJS 2015-09-25 17:50:04

0

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

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

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

+0

'CodeTemplate'类中的'CodeTemplate GetCodeTemplateInstance(string templatePath)'。与'Page.LoadControl(string)'类似地工作在web表单中。 – JJS 2015-09-25 17:53:05