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 を返す必要があります。これは、最初または 2 番目のオプションよりもはるかに困難です。

于 2011-08-11T16:46:20.043 に答える
-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")

Exec セクションの場合:

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

under() コマンドは、AtomWeaver でインタラクティブなモデリング環境を構築するのに役立ちます。これで、ユーザーは 1 つの cs_class Atom を使用してモデルを作成し、必要な数の cs_code_block Atom を追加できます。モデルを実行すると、目的のコードが生成されます。

AtomWeaver を使用すると、モデルとコード ジェネレーターを進化させることができます。数行から始めて、それを成長させて完全なジェネレーターを取得するのは簡単です。

これは、AtomWeaver で作成できるものを非常に単純化した例であることは承知していますが、これは、何が達成できるかを簡単に理解するためのものです。

于 2011-05-16T23:04:21.653 に答える