Visual Studio 2017 のプロジェクト・項目テンプレートがインストールされている場所を調べる方法

#### はじめに
Visual Studio で、プロジェクト・項目テンプレートを独自に作成するときに、既存のテンプレートを参考にしたい場合があると思います。Visual Studio により提供されるテンプレートの場所を探すのは、意外と面倒です。
そこで、Visual Studio のプロジェクト・項目テンプレートがインストールされているパスを調べるための方法について記載します。

#### 方法
Visual Studio では、診断用のログを出力する機能が実装されています。この設定は既定では OFF にされていますが、以下の手順で設定を行うことにより、テンプレートの診断ログを CSV ファイルに出力することができます。

- pkgdef ファイルを作成します
    - 以下のファイルを作成します
        - C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\EnablePkgDefLogging.pkgdef

            ![PackageDef](https://gist.githubusercontent.com/tafuji/82518fdd6c6942e918bb6127576fdf32/raw/49093d6e958a40c329274ee9c84115bad27ee846/01-PackageDef.png)
    - ファイルに以下の内容を記述してください

        ```
        [$RootKey$\VsTemplate]
        "EnableTemplateDiscoveryLog"=dword:00000001
        ```
- 「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

    ![CSV File Path](https://gist.githubusercontent.com/tafuji/82518fdd6c6942e918bb6127576fdf32/raw/49093d6e958a40c329274ee9c84115bad27ee846/02-CsvFile.png)

- CSV を開くと、プロジェクト・項目テンプレートのインストールフォルダが出力されていることがわかります

![CSV File Contents](https://gist.githubusercontent.com/tafuji/82518fdd6c6942e918bb6127576fdf32/raw/49093d6e958a40c329274ee9c84115bad27ee846/03-CsvFileResult.png)

#### 確認

- 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,
```
- Explorer で場所を確認すると、ログに出力されている通り、テンプレートのファイルが存在していることが分かります

    ![Xamarin.Forms Template](https://gist.githubusercontent.com/tafuji/82518fdd6c6942e918bb6127576fdf32/raw/49093d6e958a40c329274ee9c84115bad27ee846/04-Xamarin.Forms.TemplatePath.png)

#### 注意事項
テンプレートの場所が分かったら、EnablePkgDefLogging.pkgdef ファイルを削除するか、値を ```dword:00000000``` に修正して、```devenv /updateConfiguration``` コマンドを再度実行して、診断ログの出力を無効にしておきましょう。

#### 参考
- [Upgrading Custom Project and Item Templates for Visual Studio 2017](https://docs.microsoft.com/en-us/visualstudio/extensibility/upgrading-custom-project-and-item-templates-for-visual-studio-2017)
    - このページの「Troubleshooting Template Installation」を参考にしました