LoginSignup
4
4

More than 5 years have passed since last update.

[ネタ] T4を活用してC#をスクリプトっぽく使う

Last updated at Posted at 2015-05-28

以前の記事で、C#とT4が共存できることを示しましたが、

これを活用してVisualStudio上でC#コードをスクリプトっぽく手軽にコーディングや実行ができるのではないかと思いついたのでやってみました

早速コードです

SharpScript.cs
#region T4ディレクティブ設定
/*
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Text.RegularExpressions" #>
<#@ import namespace="System.Windows.Forms" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Drawing" #>
<#@ output extension="output.txt" #>
プロジェクト内のクラスを利用する場合はコメントを外す
<#//@ assembly name="$(ProjectDir)$(OutDir)$(TargetFileName)" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Drawing" #>
<#@ assembly name="System.Windows.Forms" #>
<# GenerationEnvironment.Length = 0; SharpScript_Start(); #>
<#//*/
//#><#+/*
#endregion
#region C#クラス設定
//C#上でMainメソッドを有効にする場合はコメントを外す
//#define USEMAIN
//T4関連クラスのインテリセンスを有効にしたい場合はコメントを外す(要アセンブリ設定)
//#define USET4CLASS
#endregion
#region クラス定義
using System;
using System.IO;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Linq;
using System.Drawing;
//WindowsForms関連クラスを使用するときはコメントを外す
//using System.Windows.Forms;

class SharpScript
#if USET4CLASS
    : Microsoft.VisualStudio.TextTemplating.TextTransformation
#endif
{
#if USET4CLASS
#pragma warning disable 0169, 0649
    Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost Host;
#pragma warning restore 0169, 0649
#endif
#endregion
    //*///#><#+

    //ここにC#コードを記述します、SharpScript_Startメソッドが最初に呼ばれます
    public void SharpScript_Start()
    {
        Write("Hello World!!");
    }

    //*///#><#+/*
#region Mainメソッド
#if USEMAIN
    public static void Main(string[] args)
    {
        SharpScript s = new SharpScript();
        s.SharpScript_Start();
        s.FinalWrite();        
    }
#endif
#endregion
#region ベースメソッド
#if USET4CLASS
    public override string TransformText()
    {
        return "";
    }

    public void FinalWrite()
    {
        System.Console.Write(GenerationEnvironment);
    }
#else
    public void Write(string val)
    {
        System.Console.Write(val);
    }

    public void WriteLine(string val)
    {
        System.Console.WriteLine(val);
    }

    public void Write(string val, params object[] arg)
    {
        System.Console.Write(val, arg);
    }

    public void WriteLine(string val, params object[] arg)
    {
        System.Console.WriteLine(val, arg);
    }

    public void FinalWrite()
    {
    }
#endif
}
#endregion
//*///#>

これを適当なプロジェクトの新しいCSファイルにコピーしてプロパティのカスタムツール欄に「TextTemplatingFileGenerator」と入れて保存してみてください。

このまだと、出来上がったSharpScript.output.txtにHello World!と記述されているはずです。

また、ビルドをするとコマンドラインにHello World!と表示されているはずです。

Startメソッド内のコードを書き換えてみたりして遊んでみてください。

・・・でもこれじゃ全然手軽じゃないですよね、

というわけでVisualStudioテンプレートを作ってみました。これですぐに始められます。

4
4
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
4
4