0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have 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 #>          
<# } #>

####参考資料
https://light11.hatenadiary.com/entry/2021/03/01/204148

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?