0

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

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

例如有一个模板

using System;

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

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

PS对不起我的英语不好。

4

2 回答 2

0

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

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

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

于 2011-08-11T16:46:20.043 回答
-2

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

在您的情况下,我将构建一个名为 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 构建什么,但这只是为了让您快速了解您可以完成什么。

于 2011-05-16T23:04:21.653 回答