はじめに
Visual Studio で、プロジェクト・項目テンプレートを独自に作成するときに、既存のテンプレートを参考にしたい場合があると思います。Visual Studio により提供されるテンプレートの場所を探すのは、意外と面倒です。
そこで、Visual Studio のプロジェクト・項目テンプレートがインストールされているパスを調べるための方法について記載します。
方法
Visual Studio では、診断用のログを出力する機能が実装されています。この設定は既定では OFF にされていますが、以下の手順で設定を行うことにより、テンプレートの診断ログを CSV ファイルに出力することができます。
-
pkgdef ファイルを作成します
-
「Developer Command Prompt for VS2007」で以下のコマンドを実行します
devenv /updateConfiguration
-
Visual Studio を起動して、新規プロジェクトを作成します(作成するプロジェクトの種類は問いません)
-
プロジェクトに新しい項目を追加します(追加する項目の種類は問いません)
-
以下の場所に、Visual Studio にインストールされたテンプレートに関するログが CSV ファイルに出力されます
- %LOCALAPPDATA%\Microsoft\VisualStudio\15.0_[instanceid]\VsTemplateDiagnosticsList.csv
- [instanceid] は、Visual Studio のインスタンス ID
- 例の場合は、インスタンス ID "6cbcf19b"
- %LOCALAPPDATA%\Microsoft\VisualStudio\15.0_6cbcf19b\VsTemplateDiagnosticsList.csv
- [instanceid] は、Visual Studio のインスタンス ID
- %LOCALAPPDATA%\Microsoft\VisualStudio\15.0_[instanceid]\VsTemplateDiagnosticsList.csv
-
CSV を開くと、プロジェクト・項目テンプレートのインストールフォルダが出力されていることがわかります
確認
-
CSV の項目は、以下の順番で値が出力されています
- テンプレートのフルパス
- テンプレートがどのようにデプロイされたかのフラグ(0 と 1 の値をとるようですが、何が違うのかは、よくわかりませんでした)
- テンプレートのファイル名(フルパスからの相対パスが出力されているようです)
- その他のプロパティ
-
Xamarin.Forms の Master Detail テンプレートの場合
項目 値 テンプレートのパス C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2017\ENTERPRISE\Common7\IDE\EXTENSIONS\XAMARIN.FORMS\T\P テンプレートのファイル名 \CSharp\Cross-Platform\MasterDetail.NoAzure.PCL.zip
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2017\ENTERPRISE\Common7\IDE\EXTENSIONS\XAMARIN.FORMS\T\P,0,\CSharp\Cross-Platform\MasterDetail.NoAzure.PCL.zip,CSharp\Cross-Platform\MasterDetail.NoAzure.PCL.zip\MasterDetail.NoAzure.PCL.vstemplate,3.0.0,ProjectGroup,Xamarin.Forms.MasterDetail.NoAzure.PCL,,CSharp,,CSharp\Cross-Platform\MasterDetail.NoAzure.PCL.zip\MasterDetail.NoAzure.PCL.vstemplate,0,
注意事項
テンプレートの場所が分かったら、EnablePkgDefLogging.pkgdef ファイルを削除するか、値を dword:00000000
に修正して、devenv /updateConfiguration
コマンドを再度実行して、診断ログの出力を無効にしておきましょう。
参考
-
Upgrading Custom Project and Item Templates for Visual Studio 2017
- このページの「Troubleshooting Template Installation」を参考にしました