テキストテンプレートのアセンブリのロードと名前空間の宣言

つーわけで今回はテキストテンプレート中でアセンブリをロードする方法と使用する名前空間の宣言を行う方法です。
と、書いてもピンと来ないかもしれないのでいいかえると、


アセンブリのロード => VisualStudioで参照の設定にdllを追加する。
名前空間の宣言 => C#でのusing System; みたいなもの。


この二つをテキストテンプレートのコードで行う方法です。
さっそく例。

<#@ template language="C#" #>
<#@ output  extension=".txt" #>
<#@ assembly name="System.Net" #>
<#@ import namespace="System.Net" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Text" #>

<#
WebClient wc = new WebClient();
Stream st = wc.OpenRead("http://www.google.co.jp");

StreamReader reader = new StreamReader(st, Encoding.GetEncoding("Shift_JIS"));
String html = reader.ReadToEnd();

reader.Close();
st.Close();
#>

<#=html#>

実行結果

<html><head><meta http-equiv="content-type" content="text/html; charset=Shift_JIS"><title>Google</title>
...以下省略

長ったらしいので実行結果は省略で。
やっていることはというと、googleのトップページにアクセスし内容を取得してそのままテキストとして出力しているだけです。


ではさっそく解説。


コードの最初のほうでは<#@ #>タグで囲まれた行が続いています。
これをこのタグで囲まれたものをディレクティブといいます。
先頭2つは以前のテキストテンプレートの紹介で書いているのでわからない方はそちらを参照してください。
今回の目的であるアセンブリのロードと名前空間の宣言に関するコードはそれに続くコードです。


まずアセンブリをロードする時は<#@ assembly name="〜" #>のディレクティブを使用します。そしてname=の〜部分にロードしたいアセンブリ名を書きます。
例ではSystem.Netアセンブリをロードしています。


続いて名前空間の宣言方法は<#@ import namespace="〜" #>のディレクティブを使用します。ここでも同じようにnamespace=の〜部分に宣言したい名前空間を書きます。
例ではSystem.Net、System.IO、System.Textを宣言しています。


名前空間の宣言はアセンブリのロードと違い必須ではありません。
最初に書いたようにC#のusing〜の代わりなので無い場合はコード中で完全名を指定すればいいだけです。




今回はさりげなく例題のコードでネットワークアクセスを使用しました。
このようにテキストテンプレートではWebを利用したテキスト出力も可能です。
というより、.NETでできることすべてを利用してテキスト出力が可能なのです。


夢が広がりんぐですネ。