カスタム MVC テンプレート
作成者: Jacques Eloff
Visual Studio 2010 向け MVC 3 Tools Update のリリースでは、MVC プロジェクト用の別のプロジェクト ウィザードが導入されました。 この変化は、2 つの要因によって推進されました。 まず、MVC 3 での新しいテンプレートの導入と、Razor などの追加のビュー エンジンのサポートにより、Visual Studio の [新しいプロジェクト] ダイアログが過密になります。 2 つ目は、お客様が機能拡張ポイントを求めていました。新しい MVC プロジェクト ウィザードを使用すると、これらの要求に応答する機会が得られることになります。
カスタム テンプレートの追加は、レジストリを使用して MVC プロジェクト ウィザードに新しいテンプレートを表示するために依存する困難なプロセスでした。 新しいテンプレートの作成者は、インストール時に必要なレジストリ エントリが確実に作成されるように、MSI 内でラップする必要がありました。 別の方法は、テンプレートを含む ZIP ファイルを使用できるようにし、エンドユーザーに必要なレジストリ エントリを手動で作成してもらう方法です。
前述のどちらのアプローチも理想的ではないため、VSIX 拡張機能によって提供される既存のインフラストラクチャの一部を利用して、Visual Studio 2012 向け MVC 4 以降のカスタム MVC テンプレートの作成、配布、インストールを容易にすることにしました。 このアプローチによって提供される利点の一部は次のとおりです。
- VSIX 拡張機能には、異なる言語 (C# と Visual Basic) と複数のビュー エンジン (ASPX および Razor) をサポートする複数のテンプレートを含めることができます。
- VSIX 拡張機能は、Express SKU を含む Visual Studio の複数の SKU を対象にすることができます。
- Visual Studio ギャラリーを使用すると、幅広いユーザーに拡張機能を配布できます。
- VSIX 拡張機能をアップグレードすると、カスタム テンプレートの修正や更新を簡単に作成できます。
前提条件
- ユーザーは、vstemplate ファイルに必要なマークアップなど、プロジェクト テンプレートの作成に慣れている必要があります。
- ユーザーは Visual Studio Professional 以降をインストールする必要があります。 Express SKU では、VSIX プロジェクトの作成はサポートされていません。
- Visual Studio 2012 SDK がインストールされました。.
例
最初の手順では、C# または Visual Basic を使用して新しい VSIX プロジェクトを作成します。 [ファイル] > [新しいプロジェクト] を選択し、左側のウィンドウで [機能拡張] をクリックし、[VSIX プロジェクト] を選択します。
プロジェクトが作成されると、VSIX デザイナーが開きます。
デザイナーは、拡張機能をインストールするときにユーザーに表示される拡張機能の一般的なプロパティの一部を編集するために、またはVisual Studio(ツール>拡張機能と更新プログラム)にインストールされた拡張機能を参照するために使用されます。 一般的な情報が完了したら、[ターゲットのインストール] タブをクリックします。
このタブは、拡張機能でサポートされている Visual Studio の SKU とバージョンを指定するために使用されます。 VSIX のマシンごとのインストールを有効にするために、[この VSIX がすべてのユーザーにインストールされている] のチェックボックスを選択します。 右側の [新規] ボタンをクリックして、Web Developer Express (VWD) などの SKU を追加します。
すべての Professional 以上の SKU (Professional、Premium、Ultimate) をサポートする場合は、ファミリ内の最小 SKU Microsoft.VisualStudio.Pro を選択するだけです。 インストールターゲットを完了したら、すべての変更を保存してください。
[アセット] タブは、すべてのコンテンツ ファイルを VSIX に追加するために使用します。 MVC にはカスタム メタデータが必要であるため、[アセット] タブを使用してコンテンツを追加する代わりに、VSIX マニフェスト ファイルの生 XML を編集します。 まず、テンプレートの内容を VSIX プロジェクトに追加します。 フォルダーと内容の構造をプロジェクトのレイアウトを反映することが重要です。 次の例には、Basic MVC プロジェクト テンプレートから派生した 4 つのプロジェクト テンプレートが含まれています。 次の例に示すように、プロジェクト テンプレートを構成するすべてのファイル (ProjectTemplates フォルダーの下にあるすべてのファイル) が VSIX プロジェクト ファイルのコンテンツ項目グループに追加され、各項目に CopyToOutputDirectory と IncludeInVsix メタデータ セットが含まれていることを確認します。
<Content Include="ProjectTemplates\MyMvcWebApplicationProjectTemplate.csaspx\BasicWeb.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<IncludeInVSIX>true</IncludeInVSIX>
</Content>
そうでない場合、VSIX のビルド時に IDE によってテンプレートの内容のコンパイルが試みられ、エラーが発生する可能性があります。 多くの場合、テンプレート内のコード ファイルには、プロジェクト テンプレートがインスタンス化され、IDE でコンパイルできないときに Visual Studio で使用される特別なテンプレート パラメーターが含まれています。
VSIX デザイナーを閉じ、ソリューション エクスプローラーで source.extension.manifest ファイルを右クリックし、[ファイルを開くアプリケーションの選択] を選択し、[XML (テキスト) エディター] オプションを選択します。
<Assets> 要素を作成し、VSIX に含める必要がある各ファイルの <Asset> 要素を追加します。 各 <Asset> 要素の Type 属性は、Microsoft.VisualStudio.Mvc.Template に設定する必要があります。 これは、MVC プロジェクト ウィザードのみが理解するカスタム名前空間です。 マニフェスト ファイルの構造とレイアウトの詳細については、VSIX 2.0 スキーマのドキュメントを参照してください。
VSIX にファイルを追加するだけでは、MVC ウィザードにテンプレートを登録するだけでは不十分です。 テンプレート名、説明、サポートされているビュー エンジン、プログラミング言語などの情報を MVC ウィザードに提供する必要があります。 この情報は、各 vstemplate ファイルの <Asset> 要素に関連付けられているカスタム属性で提供されます。
<Asset d:VsixSubPath="ProjectTemplates\MyMvcWebApplicationProjectTemplate.csaspx"
Type="Microsoft.VisualStudio.Mvc.Template"
d:Source="File"
Path="ProjectTemplates\MyMvcWebApplicationProjectTemplate.csaspx\BasicMvcWebApplicationProjectTemplate.11.csaspx.vstemplate"
ProjectType="MVC"
Language="C#"
ViewEngine="Aspx"
TemplateId="MyMvcApplication"
Title="Custom Basic Web Application"
Description="A custom template derived from a Basic MVC web application (Razor)"
Version="4.0"/>
存在する必要があるカスタム属性の説明を次に示します。
- ProjectType は MVC に設定する必要があります。
- Language は、テンプレートでサポートされる開発言語を指定します。 有効な値は C# または VB です。
- ViewEngine は、Aspx や Razor などのテンプレートでサポートされるビュー エンジンを指定します。 このフィールドにはユーザー設定の値を指定できます。
- TemplateId は、テンプレートをグループ化するために使用されます。 値が既存のテンプレート ID と一致する場合は、MVC ウィザードに以前に登録されたテンプレートをオーバーライドします。
- Title は、各プロジェクト テンプレートの下にある MVC ウィザードに表示される簡単な説明を指定します。
- Description は、テンプレートのより詳細な説明を指定します。
マニフェストにすべてのファイルを追加して保存すると、デザイナーの [アセット] タブにすべてのファイルが表示されますが、vstemplate ファイルの <Asset> 要素に追加したカスタム属性は表示されません。
残っているのは、VSIX プロジェクトをコンパイルしてインストールすることです。
VSIX 拡張機能をテストするマシンで、Visual Studio のすべてのインスタンスが閉じていることを確認します。 Visual Studio は起動時に新しい拡張機能をスキャンするため、VSIX のインストール中に IDE が開いている場合は、Visual Studio を再起動する必要があります。 エクスプローラーで、VSIX ファイルをダブルクリックして VSIX インストーラーを起動し、[インストール] をクリックして Visual Studio を起動します。
メニューから [ツール] > [拡張機能と更新プログラム] を選択し、拡張機能がインストールされたことを確認します。 拡張機能のインストール中に VSIX インストーラーでエラーが報告された場合は、VSIX インストーラー ログで詳細を確認できます。 通常、ログは拡張機能をインストールしたユーザーの %temp% フォルダー (C:\Users\Bob\AppData\Local\Temp など) に作成されます。
ウィンドウを閉じた後、MVC 4 プロジェクトを作成して、新しいテンプレートが MVC ウィザードに表示されるかどうかを確認できます。
制限事項
- MVC ウィザードでは、ローカライズされたカスタム テンプレートはサポートされていません。
- カスタム テンプレートの検索に失敗した場合、ウィザードはエラーを報告しません。 必要なカスタム属性のいずれかが存在しない場合、テンプレートはウィザードから除外されます。