次の方法で共有


新しいプロジェクトの生成: 内部、パート 2

新しいプロジェクトの生成: 内部的な処理、パート 1」では、[新しいプロジェクト] ダイアログボックスの設定方法について考慮しました。 Visual C# Windows アプリケーションを選択し、[名前] および [場所] テキストボックスに入力して、[OK] をクリックしたという前提で話を進めます。

ソリューション ファイルの生成

アプリケーション テンプレートを選択すると、対応する .vstemplate ファイルを解凍して開き、このファイル内の XML コマンドを解釈するためのテンプレートを起動するように Visual Studio に指示が出されます。 これらのコマンドによって、新規または既存のソリューションにプロジェクトとプロジェクト項目が作成されます。

このテンプレートは、.vstemplate ファイルを保持する同じ .zip フォルダーから、項目テンプレートと呼ばれるソース ファイルをアンパックします。 テンプレートは、これらのファイルを新しいプロジェクトにコピーし、適宜カスタマイズします。

テンプレート パラメーターの置換

テンプレートによって項目テンプレートが新しいプロジェクトにコピーされると、テンプレート パラメーターが、ファイルをカスタマイズする文字列に置き換えられます。 テンプレート パラメーターは、ドル記号が前後に挿入された (例: $date $) 特殊なトークンです。

一般的なプロジェクト項目テンプレートを見てみましょう。 Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033\WindowsApplication.zip フォルダーにある Program.cs を抽出して調べてみます。

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace $safeprojectname$
{
    static class Program
    {
        // source code deleted here for brevity
    }
}

Simple という名前の新しい Windows アプリケーション プロジェクトを作成した場合、テンプレートは $safeprojectname$ パラメーターをプロジェクトの名前に置き換えます。

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace Simple
{
    static class Program
    {
        // source code deleted here for brevity
    }
}

テンプレート パラメーターの完全な一覧については、「テンプレート パラメーター」をご覧ください。

.Vstemplate ファイルの内容

ベーシックな .vstemplate ファイルの形式は次のようになります。

<VSTemplate Version="2.0.0"     xmlns="http://schemas.microsoft.com/developer/vstemplate/2005"     Type="Project">
    <TemplateData>
    </TemplateData>
    <TemplateContent>
    </TemplateContent>
</VSTemplate>

新しいプロジェクトの生成: 内部的な処理、パート 1」では <TemplateData> セクションに注目しました。 このセクションのタグは、[新しいプロジェクト] ダイアログ ボックスの外観を制御するために使用されます。

<TemplateContent> セクションのタグは、新しいプロジェクトとプロジェクト項目の生成を制御します。 次に示すのは、\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033\WindowsApplication.zip フォルダーにある cswindowsapplication.vstemplate ファイルの <TemplateContent> セクションです。

<TemplateContent>
  <Project File="WindowsApplication.csproj" ReplaceParameters="true">
    <ProjectItem ReplaceParameters="true"
      TargetFileName="Properties\AssemblyInfo.cs">
      AssemblyInfo.cs
    </ProjectItem>
    <ProjectItem TargetFileName="Properties\Resources.resx">
      Resources.resx
    </ProjectItem>
    <ProjectItem ReplaceParameters="true"       TargetFileName="Properties\Resources.Designer.cs">
      Resources.Designer.cs
    </ProjectItem>
    <ProjectItem TargetFileName="Properties\Settings.settings">
      Settings.settings
    </ProjectItem>
    <ProjectItem ReplaceParameters="true"       TargetFileName="Properties\Settings.Designer.cs">
      Settings.Designer.cs
    </ProjectItem>
    <ProjectItem ReplaceParameters="true" OpenInEditor="true">
      Form1.cs
    </ProjectItem>
    <ProjectItem ReplaceParameters="true">
      Form1.Designer.cs
    </ProjectItem>
    <ProjectItem ReplaceParameters="true">
      Program.cs
    </ProjectItem>
  </Project>
</TemplateContent>

<Project> タグはプロジェクトの生成を制御し、<ProjectItem> タグはプロジェクト項目の生成を制御します。 パラメーター ReplaceParameters が true の場合、テンプレートはプロジェクト ファイルまたは項目内のすべてのテンプレート パラメーターをカスタマイズします。 この場合、Settings.settings 以外のすべてのプロジェクト項目がカスタマイズされます。

TargetFileName パラメーターは、結果として得られるプロジェクト ファイルまたは項目の名前と相対パスを指定します。 これにより、プロジェクトのフォルダー構造を作成できます。 この引数を指定しない場合、プロジェクト項目の名前はプロジェクト項目テンプレートと同じになります。

生成される Windows アプリケーションのフォルダー構造は次のようになります。

Screenshot of the Windows application folder structure for the 'Simple' Solution in the Visual Studio Solution Explorer.

テンプレートの最初の <Project> タグのみが読み取られます。

<Project File="WindowsApplication.csproj" ReplaceParameters="true">

これにより、新しいプロジェクト テンプレートは、テンプレート項目 windowsapplication.csproj をコピーおよびカスタマイズすることによって、単純な Simple.csproj プロジェクト ファイルを作成するように指示します。

デザイナーと参照

ソリューション エクスプローラーに、Properties フォルダーが存在し、期待されるファイルが含まれていることを確認できます。 しかし、プロジェクト参照とデザイナー ファイルの依存関係 (たとえば、Resources.Designer.cs から Resources.resx や Form1.Designer.cs から Form1.cs) についてはどうでしょうか。 これらは、Simple.csproj ファイルの生成時に設定されます。

プロジェクト参照を作成する Simple.csproj の <ItemGroup> を次に示します。

<ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Deployment" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
</ItemGroup>

ソリューション エクスプローラーに表示される 6 つのプロジェクト参照があることがわかります。 以下に、別の <ItemGroup> のセクションを示します。 わかりやすくするために、多くのコードの行が削除されています。 このセクションでは、Settings.settings に依存する Settings.Designer.cs を作成します。

<ItemGroup>
    <Compile Include="Properties\Settings.Designer.cs">
        <DependentUpon>Settings.settings</DependentUpon>
    </Compile>
</ItemGroup>