ソリューションテンプレートの作成方法

PrismWPFSampleでPrismを使用したアプリケーションの基本形を作ってきましたが、自分自身のいつも使うパターンをテンプレートとして用意しておくことで、新しいアプリケーションを簡単に作り始めることができます。複数のプロジェクトを持つPrismアプリケーションのテンプレートの作り方をまとめておきます。

ソリューションの準備

元になるアプリケーションをコピーしておき、基本となる部分以外を削除します。

f:id:feynman911:20191208224209j:plain

今まで作ってきた上記のような構成から、基本部分のみを残すと次のようなものになります。

f:id:feynman911:20191208224238j:plain

この構成をテンプレートとして保存する事を考えます。

プロジェクトのテンプレートの作成

まずやらなくてはいけないのは、ソリューションに含まれるプロジェクトを一つづつテンプレート化する事です。 プロジェクトのテンプレートのエクスポートを選びます。

f:id:feynman911:20191208224254j:plain

プロジェクトのテンプレートを選択して、プロジェクトを一つ選びます。

f:id:feynman911:20191208224324j:plain

テンプレートのオプションでは、このままテンプレートとするのではないので、テンプレートを自動的にインポートのチェックを外しておきます。

f:id:feynman911:20191208224346j:plain

この作業をこの例では4回繰り返して、すべてのプロジェクトのテンプレートを作成します。

ソリューションのテンプレートの作成

ソリューションテンプレート用のフォルダーを作成し、プロジェクトごとに作成したテンプレートのZIPファイルを解凍しておきます。

f:id:feynman911:20191210221827j:plain

そこにソリューション用の .vstemplate ファイル拡張子を持つ XML ファイルを作成します。 内容は、次のように各プロジェクトの vstemplate ファイルの相対パスを記述します。 メインプロジェクトの名前を、ソリューションの新規作成時の名前にするために、ProjectTemplateLink 要素の ProjectName 属性で指定します。

<VSTemplate Version="3.0.0" Type="ProjectGroup" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
    <TemplateData>
        <Name>PrismWpfApp</Name>
        <Description>Prism WPF Application</Description>
        <Icon>__TemplateIcon.ico</Icon>
        <ProjectType>CSharp</ProjectType>
    </TemplateData>
    <TemplateContent>
        <ProjectCollection>
            <ProjectTemplateLink ProjectName="$safeprojectname$" CopyParameters="true">
                PrismWpfApp\MyTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName="CommonModels">
                CommonModels\MyTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName="ModuleA">
                ModuleA\MyTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName="TraceListeners">
                TraceListeners\MyTemplate.vstemplate
            </ProjectTemplateLink>            
        </ProjectCollection>
    </TemplateContent>
</VSTemplate>

テンプレートの配置

ソリューション用のフォルダーごとZip圧縮して、テンプレートのディレクトリに .zip ファイルをコピーします。 既定では、このディレクトリは %USERPROFILE%\Documents\Visual Studio <バージョン>\Templates\ProjectTemplates です。C#用のテンプレートなので、更に下位のVisual C#フォルダーに置いても良いでしょう。

作成したソリューションの場所

今回のソースコードと作成したテンプレートは次の場所に置いてあります。

github.com