2011-05-13 80 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