Nová generace projektů: Pod pokličkou, část druhá

V nové generaci projektů: Pod kapotou jsme viděli, jak je vyplněno dialogové okno Nový projekt . Předpokládejme, že jste vybrali aplikaci Visual C# pro Windows, vyplnili textová pole Název a Umístění a klikli na OK.

Generování souborů řešení

Volba šablony aplikace směruje Visual Studio k rozbalení a otevření odpovídajícího souboru .vstemplate a spuštění šablony pro interpretaci příkazů XML v tomto souboru. Tyto příkazy vytvářejí projekty a položky projektu v novém nebo existujícím řešení.

Šablona rozbalí zdrojové soubory označované jako šablony položek ze stejné složky .zip, která obsahuje soubor .vstemplate. Šablona tyto soubory zkopíruje do nového projektu a odpovídajícím způsobem je upraví.

Nahrazení parametru šablony

Když šablona zkopíruje šablonu položky do nového projektu, nahradí všechny parametry šablony řetězci pro přizpůsobení souboru. Parametr šablony je speciální token, který předchází a následuje znak dolaru, například $date$.

Podívejme se na typickou šablonu položky projektu. Extrahujte a prozkoumejte program.cs ve složce Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033\WindowsApplication.zip.

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

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

Pokud vytvoříte nový projekt aplikace pro Windows s názvem Simple, šablona nahradí $safeprojectname$ parametr názvem projektu.

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

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

Úplný seznam parametrů šablony najdete v tématu Parametry šablony.

Pohled uvnitř . Soubor VSTemplate

Základní soubor .vstemplate má tento formát.

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

Podívali jsme se na <část TemplateData> v nové generaci projektu: Pod kapotou, část 1. Značky v této části slouží k řízení vzhledu dialogového okna Nový projekt .

Značky v oddílu <TemplateContent> řídí generování nových projektů a položek projektu. Tady je <část TemplateContent> ze souboru cswindowsapplication.vstemplate ve složce \Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033\WindowsApplication.zip.

<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>

Značka <Project> řídí generování projektu a <značka ProjectItem> řídí generování položky projektu. Pokud je parametr ReplaceParameters pravdivý, šablona přizpůsobí všechny parametry šablony v souboru projektu nebo položce. V tomto případě jsou všechny položky projektu přizpůsobené s výjimkou Nastavení.settings.

Parametr TargetFileName určuje název a relativní cestu výsledného souboru projektu nebo položky. Díky tomu můžete pro svůj projekt vytvořit strukturu složek. Pokud tento argument nezadáte, položka projektu bude mít stejný název jako šablona položky projektu.

Výsledná struktura složek aplikací pro Windows vypadá takto:

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

První a jediná <značka Projectu> v šabloně přečte:

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

To dává šabloně Nového projektu pokyn k vytvoření souboru projektu Simple.csproj zkopírováním a přizpůsobením položky šablony windowsapplication.csproj.

Návrháři a odkazy

V Průzkumník řešení uvidíte, že složka Vlastnosti existuje a obsahuje očekávané soubory. Ale co odkazy na projekt a závislosti souborů návrháře, jako jsou Resources.Designer.cs na Resources.resx a Form1.Designer.cs na Form1.cs? Tyto soubory jsou nastavené v souboru Simple.csproj při jeho vygenerování.

Tady je <skupina ItemGroup> z Simple.csproj, která vytvoří odkazy na projekt:

<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>

Vidíte, že se jedná o šest odkazů na projekt, které se zobrazují v Průzkumník řešení. Tady je oddíl z jiné <skupiny> položek. Z důvodu přehlednosti bylo odstraněno mnoho řádků kódu. Tato část Nastavení. Designer.cs závislý na Nastavení.settings:

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