LoginSignup
0
0

More than 1 year has passed since last update.

Gtk3アプリ RiderとT4テンプレートでHelloWorld

Last updated at Posted at 2021-09-15

T4テンプレートとは

Web言語にあるHTMLテンプレートエンジンのようなもの。
変数や配列を埋め込んで、For文で回してHTMLを出力したり、
テキストやCSクラスファイルを出力できる
クラスのテンプレートをC#とテキストで作り、CSのソースとして、Dllとして書き出すができる

ttファイルを追加する

Riderのエクスプローラーから右クリックから追加からT4ファイルを選択

dotnet-t4-new-file.png

ttファイルを開く

HelloWorldを記入します

test.tt
<#@ template language="C#" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
HelloWorld

NugetからSystem.CodeDomをインストール

Screenshot from 2021-09-15 14-37-44.png
System.CodeDomをインストールしてください。
インストールしていないとコンパイル時に'System.CodeDom.Compiler' に見つかりませんでしたとエラーが出ます。

型名 'CompilerErrorCollection' は名前空間 'System.CodeDom.Compiler' に見つかりませんでした。
この型はアセンブリ 'System.CodeDom, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' 
に転送されました。このアセンブリへの参照を追加することを検討してください。

ttファイルを実行

Preprocess Templateから実行

dotnet-t4-execute.png

実行

CSの従属ファイルが生成されます。
Screenshot from 2021-09-15 14-33-24.png

テキストを出力するコードを書く

適当なところにクラスを宣言し、TransformText()を呼び出すとテンプレートの内容が出力されます。
System.CodeDomがNugetからインストールしていないとTransformTextでエラーが出ます。

test test = new test();
var a = test.TransformText();
Console.WriteLine(a);

Screenshot from 2021-09-15 14-36-14.png

変数に値を入れる。コンストラクター変数を入れてttの中で表示する

従属クラスはpartialクラスのため、後付でクラスの内容を追加することができます。
コンストラクターやSetterを追加します。

namespace T4SapmleGtkApp
{
   partial class test
    {
        public string TestText1;

        private string TestText2;
        public test(string data)
        {
            this.TestText2 = data;
        }
    }
    class MainWindow : Window
    {
        public MainWindow() : this(new Builder("MainWindow.glade"))
        {
            test test = new test("2222");
            test.TestText1 = "1111";
            var a = test.TransformText();
            Console.WriteLine(a);
        }
    }

TTファイルの中では<#=  #>でC#の領域にして表示します。

test.tt

<#= TestText1 #>

<#= TestText2 #>

For文の使い方

<# #>内がC#の領域
<#= val #>内がC#の変数1つまで表示する
それ以外はテキストを表示する

<# var val = "test"; #>
<# for (int i = 1; i <= 10; i++){ #>
        test <#= val #> <#= i #>          
<# } #>

参考資料

Gtk3アプリ TextView TreeViewにスクロールバーを表示するに続く

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0