VS2010 Shell (Isolated) again.

前回は結局プロジェクトテンプレートのパスを直打ちしていたわけですが、なんとか.\NullPathというダミーパスでも
プロジェクトが表示できるようになったのでそれまでの手順を再度まとめておきます。

前提:
Visual Studio 2010 SP1
Visual Studio 2010 SDK SP1


[ファイル]-[新規作成]-[プロジェクト]を選択。

[その他のプロジェクトの種類]-[機能拡張]-[Visual Studio Shell Isolated]を選択。
[名前]にMyShellと入力して[OK]

ソリューションエクスプローラー上のソリューション名の上で右クリックして[追加]-[新しいプロジェクト]を選択。

[Visual C#]-[Extensibility]-[Visual Studio Package]を選択。
[名前]にMyToolsと入力して[OK]

[Next]->[Next]->[Next]->[Next]とWizardを進めて[Select Test Project Options]のページでは簡単のために[Integration Test Project]と[Unit Test Project]のチェックを外して[Finish]




追加されたMyToolsプロジェクトをソリューションエクスプローラー上で選択後、右クリックから[追加]-[クラス]を選択。

[名前]にMyToolsFactory.csと入力して[OK]

[スタート]にある[すべてのプログラム]から[Microsoft Visual Studio 2010]-[Visual Studio Tools]-[Visual Studio コマンド プロンプト (2010)]を選択。

uuidgenと入力してEnter
出力されたGUID文字列を右クリックから[範囲指定]で選択し、右クリックしてクリップボードにコピー。

[MyTools]プロジェクトのGuids.csファイルを開いて、先ほど追加したMyToolsFactory用のGUID定義を追加。

[MyTools]プロジェクトのMyToolsFactory.csファイルを開いて、GuidAttribute属性を追加。

[MyTools]プロジェクトにTemplates/Projects/MyProjectディレクトリを追加。
MyProjectディレクトリにアイコンファイルIcon1.icoXMLファイルMyProject.myproj, MyProject.vstemplate, Program.xmlを追加。

MyProjectディレクトリに追加した4つのファイルを選択後、プロパティウィンドウで[ビルド アクション]をZipProjectに設定。

ソリューションエクスプローラー上で[MyTools]プロジェクトを選択後、右クリックから[プロジェクトのアンロード]を選択。

アンロードされた[MyTools]プロジェクトを右クリックして[編集 MyTools.csproj]を選択。

要素を探して、それぞれの子要素として要素を追加する。

      <ZipProject Include="Templates\Projects\MyProject\Icon1.ico">
          <OutputSubPath>SubDir</OutputSubPath>
      </ZipProject>
      <ZipProject Include="Templates\Projects\MyProject\MyProject.vstemplate">
          <OutputSubPath>SubDir</OutputSubPath>
      </ZipProject>
      <ZipProject Include="Templates\Projects\MyProject\MyProject.myproj">
          <OutputSubPath>SubDir</OutputSubPath>
      </ZipProject>
      <ZipProject Include="Templates\Projects\MyProject\Program.xml">
          <OutputSubPath>SubDir</OutputSubPath>
      </ZipProject>

保存してファイルを閉じた後、ソリューションエクスプローラー上で右クリックから[プロジェクトの再読み込み]を選択。
[MyProject.vstemplate]ファイルを開いて以下の通りに変更、保存する。

<VSTemplate Version="2.0.0" Type="Project" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
    <TemplateData>
        <Name>My Application</Name>
        <Description>A project for creating my application.</Description>
        <Icon>Icon1.ico</Icon>
        <ProjectType>MyProject</ProjectType>
        <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>
    </TemplateData>
    <TemplateContent>
        <Project File="MyProject.myproj" ReplaceParameters="true">
            <ProjectItem ReplaceParameters="true">Program.xml</ProjectItem>
        </Project>
    </TemplateContent>
</VSTemplate>

[MyToolsPackage.cs]ファイルを開いてMyToolsPackageクラスにProvideProjectFactoryAttribute属性を指定する。

    (略)
    [Guid(GuidList.guidMyToolsPkgString)]
    [ProvideProjectFactory(typeof(MyToolsFactory), "MyProject",
        "My Project File (*.myproj);*.myproj", "myproj", "myproj", @".\NullPath",
        LanguageVsTemplate = "MyProject")]
    public sealed class MyToolsPackage : Package

[ShellExtensionsVSIX]プロジェクトの[source.extension.vsixmanifest]をダブルクリックして、デザイナで開く。
[Add Content]を押して[Select a content type]にVS Package、[Select a source]にProject, MyToolsを選択して[OK]

再度[Add Content]を押して[Select a content type]にProject Template、[Select a source]にProject, MyToolsを選択して[OK]

ソリューションをビルドして[F5]キーを押してデバッグ実行した後、[ファイル]-[新規作成]-[プロジェクト]

[インストールされたテンプレート]に[MyProject]-[SubDir]が表示されて、それぞれに[My Application]のテンプレートが表示されることが確認できる。

この後はMPF for Projects - Visual Studio 2010を活用してMyToolsFactoryを実装していくことになる予感がするわけですがそれはまた後で書きます。