C# 開発環境を Visual Studio 2019 に切り替えたので、いままで使っていた項目テンプレートの移行を機に、項目テンプレートの作り方などを整理しました。
GitHub に「VisualStudio Extensions」として公開しました。(テンプレートギャラリーには公開していません)
項目テンプレートって、どんなもの?

こんな感じで、作成したテンプレートが「新しい項目の追加」のウィンドウに表示されるようになります。たとえば私が作成した「RegionClass」を選択すると、最初から region ディレクティブが設定された状態のファイルが作成されます。便利。

項目テンプレートの構成
- 設定ファイル (.vstemplate)
- テンプレート記述ファイル (.cs)
- アイコン画像
項目テンプレートは上記の3つのファイルを (.zip) ファイルに圧縮して次のフォルダーに配置します。(C# の例です)

PC > ドキュメント > Visual Studio 20xx > Templates > ItemTemplates > Visual C#
設定ファイル (.vstemplate)
「RegionClass」項目テンプレートの (.vstemplate) ファイルを作成した例がこちら。
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item"> <TemplateData> <DefaultName>RegionClass.cs</DefaultName> <Name>RegionClass</Name> <Description>Region Directive で区切られた空の Public Class テンプレートです。</Description> <ProjectType>CSharp</ProjectType> <SortOrder>10</SortOrder> <Icon>__TemplateIcon.ico</Icon> </TemplateData> <TemplateContent> <References /> <ProjectItem SubType="Code" TargetFileName="$fileinputname$.cs" ReplaceParameters="true">RegionClass.cs</ProjectItem> </TemplateContent> </VSTemplate>
見ての通り拡張子は .vstemplate と専用のものになっていますが、中身は単純な XML です。重要な要素は次。
| パラメーター | 説明 |
|---|---|
| TemplateData | 必須の要素。新しい項目の追加 ダイアログ ボックスで表示される情報。 |
| TemplateContent | 必須の要素。テンプレートの内容を指定。 |
TemplateData の子要素は次。
| パラメーター | 説明 |
|---|---|
| Name | 必須の要素。新しい項目の追加 ダイアログ ボックスで表示される表示されるテンプレートの名前。 |
| Description | 必須の要素。新しい項目の追加 ダイアログ ボックスで表示される表示されるテンプレートの説明文(右端)。 |
| Icon | 必須の要素。新しい項目の追加 ダイアログ ボックスで表示される表示されるアイコン。 |
| ProjectType | 必須の要素。CSharp, VisualBasic, Web などのテンプレートの分類を表すテキスト。 |
テンプレート記述ファイル (.cs)
「RegionClass」項目テンプレートの (.cs) ファイルを作成した例がこちら。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace $rootnamespace$ { /// <summary> /// $safeitemname$ クラスは、***をサポートするためのクラスです。 /// </summary> public class $safeitemname$ { #region Fields #endregion #region Properties #endregion #region Initializes /// <summary> /// <see cref="$safeitemname$"/> クラスの新しいインスタンスを初期化します。 /// </summary> public $safeitemname$(){ } #endregion #region Events #endregion #region Public Methods #endregion #region Private Methods #endregion } }
region ディレクティブによるコードブロックを用意することで、折りたたみ・展開のしやすいテンプレートになっています。また、コンストラクターとクラスの XML Documentation を最初から設定することで、コメントが充実しやすいようにしてあります。 1
このテンプレートの中では「$safeitemname$」や「$rootnamespace$」といった、特殊なテンプレート パラメーターが利用されています。テンプレート パラメーターを利用することで、完全に一様なテンプレートではなく、ファイル(インスタンス)化するときにあわせて、パラメーターの値を自動置換してくれます。
たとえば、$safeitemname$ だと、ファイル名が Samples.cs なら Samples に置換され、Samples.Sample1.cs なら Samples_Sample1 になります。
| パラメーター | 説明 |
|---|---|
| safeitemname | ファイルの名前。(全でない文字とスペースはすべてアンダースコア文字に置き換えられます) |
| rootnamespace | 現在のプロジェクトのルート名前空間。 |
アイコンファイル

- 32x32 (256 colors)
- 16x16 (256 colors)
なにかしらの雛形ファイルから作りだすと楽。(リンクは私の作成したファイル)
2つのサイズに対応しておけばよいです。Visual Studio で最も小さいアイコンのサイズは、16 x 16 です。 最大は 32 x 32 です。アイコンを設計するときに、全体の 16 x 16、24 x 24、または 32 x 32 のフレームいっぱいにならないように留意してください。2
アイコンファイルの編集は手間なので「greenfish icon editor pro」などの編集用ソフトウェアを利用しましょう。(zip ファイル形式のポータブル版がおすすめ)私が GitHub にあげた「VisualStudio Extensions」は、Visual Studio のアイコンデザインに近いものにしてあります。
アイコンのデザインは、「Visual Studio のイメージとアイコン」にあるとおり、おすすめされるテーマがあるので、それに従えばよいと思います。
サンプル
GitHub にて公開しています。
参考
- 作者:BillWagner
- 発売日: 2018/09/05
- メディア: Kindle版
- 作者:ジェームズ・W. クーパー
- 発売日: 2003/07/26
- メディア: 単行本
- 作者:結城 浩
- 発売日: 2004/06/19
- メディア: 大型本