T4 でクラスやプロパティを自動生成する

Text Template Transformation Toolkit (T4) はテンプレート エンジンの一つで、主に Visual Studio で使われているものです。
これを使うと、ソースコードやデータの集合などのファイルを自動生成できます。

今回は例として、次のような Markdown を記述したら、
それに対応するクラスやプロパティを C# のソースコードとして生成することを考えます。

この Markdown の仕様を次のように定めます。

  • 空行は無視
  • 箇条書きでない行がクラス名
  • その下に続く箇条書きはプロパティ
    • 「- Type PropertyName」の形式
    • プロパティ名が省略された場合は、型名と同じ
  • クラス名およびプロパティ名は、PascalCase, camelCase のどちらを指定してもよい

以下では、このような .md ファイルを入力として、
プロパティおよびコンストラクターを持つ部分クラスを .cs ファイルに出力するように T4 で実装していきます。

まず、プロジェクトに上記の .md ファイルを追加しておきます。
そしてプロジェクトに「テキスト テンプレート (.tt)」 を追加します。

Add New Item

追加された .tt ファイルを、仕様に従って次のように実装します。

注意点は以下の通りです。

  • 初期状態では出力の拡張子が .txt になっているため、.cs に変更する
  • プロジェクト内のファイルのパスを取得するには、hostspecific="true" を指定して Host.ResolvePath メソッドを使う
  • <#= #> :テキストの出力
  • <# #> :コードを書ける、変数を使える
  • <#+ #> :メソッド、クラスなどを定義できる

.tt ファイルを保存したときに処理が実行されます。
または、.tt ファイルを右クリックして [カスタム ツールの実行] を選択すれば実行されます。

Run Custom Tool

これで、以下のように RecordTypes.cs が生成されます。

 

作成したサンプル

テストしたバージョン

  • Visual Studio 2017

参照

広告
カテゴリー: ツール. タグ: , . Leave a Comment »

.NET Core 向けビルド スクリプト

ビルド用 PowerShell スクリプトの Build Release (GitHub) を .NET Framework プロジェクト形式向けに提供していましたが、
今回は .NET Core プロジェクト形式向けのビルドツールを追加しました。

ツールの内容:

(1) Version 1up

アセンブリのバージョン (x.y.z の z の部分) を 1 だけ増加させます。
.NET Core プロジェクト形式では、プロジェクト ファイル (.csproj) でバージョンを書き換えます。

(2) Zip Release

プロジェクトを Release でビルドして、ZIP ファイルを作成します。
ビルド前にアセンブリのバージョンを増加させます。

(3) NuGet Packup

プロジェクトを Release でビルドして、NuGet パッケージを作成します。
ビルド前にアセンブリのバージョンを増加させます。

これらのツール (PowerShell スクリプト) を使う方法としては、Visual Studio の「外部ツール」に登録するのが便利だと思います。
前回にビルド用のスクリプトを Visual Studio の外部ツールに登録する方法について書きましたが、
.NET Core 版の手順も改めて以下に書いておきます。

セットアップ

Build-Release/Downloads (GitHub) からツールの最新版をダウンロードして任意のフォルダーに展開します。

Explorer

Visual Studio のメニューで [ツール] – [外部ツール] を選択して各スクリプトを追加していきます。

  • タイトル: 任意
  • コマンド: powershell.exe
  • 引数: -ExecutionPolicy Unrestricted "C:\scripts_folder\KTools.xxx.ps1"
  • 初期ディレクトリ: $(ProjectDir)
    • 右の ▶ ボタンで選択できる
    • Version 1up では $(SolutionDir) でもよい
  • 出力ウィンドウを使用: オン

External Tools

 

プロジェクトの作成

.NET Core 向けのプロジェクト テンプレートを選択してプロジェクトを作成します。

New Project

.NET Framework プロジェクトではバージョン番号などを AssemblyInfo.cs に記述しますが、
.NET Core プロジェクトではプロジェクト ファイル (.csproj) に記述します。
初期状態ではバージョンが設定されていない (その場合は 1.0.0 と判定される) ため、
プロジェクトのプロパティで [パッケージ バージョン] の値を設定しておきます。

Project Property

上記の設定をして保存すると、.csproj ファイルの <Version> に反映されます。

.csproj

なお、.NET Core のプロジェクト形式でも、

<TargetFramework>net45</TargetFramework>

のようにすれば .NET Framework をターゲットにすることができます。
詳細は .NET Core と .NET Standard を参照してください。

 

ツールの実行:

(1) Version 1up

対象のプロジェクト内のファイルを開いた状態で、メニューからスクリプトを選択すると実行されます。

External Tools Menu

実行すると、ログが Visual Studio に出力されます。

Version 1up Output

 

(2) Zip Release

同様に、メニューから Zip Release を実行します。
zip フォルダーに ZIP ファイルが作成されます。

Zip Release

 

(3) NuGet Packup

クラス ライブラリ プロジェクトを対象に NuGet Packup を実行します。
pkg フォルダーに NuGet パッケージが作成されます。

NuGet Packup

 

注意点

  • .NET Framework プロジェクト形式向けには NuGet 経由でプロジェクトに PowerShell スクリプトを追加する
    方法 (KTools.ZipRelease) も提供していますが、.NET Core プロジェクト形式では NuGet で同様の方法で追加できませんでした。

 

前回: ビルド用のスクリプトを Visual Studio の外部ツールに登録する

テスト済バージョン
Visual Studio 2017

参照
Build Release (GitHub)
外部ツールの管理
.nuspec File Reference for NuGet

カテゴリー: ALM, ツール. タグ: , . 3 Comments »