Udostępnij za pośrednictwem


Generowanie nowego projektu: za kulisami, część druga

W nowej generacji projektu: pod maską część 1 zobaczyliśmy, jak wypełniane jest okno dialogowe Nowy projekt . Załóżmy, że wybrano aplikację systemu Windows w języku Visual C#, wypełniliśmy pola tekstowe Nazwa i Lokalizacja, a następnie kliknięliśmy przycisk OK.

Generowanie plików rozwiązania

Wybranie szablonu aplikacji powoduje przekierowanie programu Visual Studio do rozpakowania i otwarcie odpowiedniego pliku vstemplate oraz uruchomienie szablonu w celu zinterpretowania poleceń XML w tym pliku. Te polecenia tworzą projekty i elementy projektu w nowym lub istniejącym rozwiązaniu.

Szablon rozpakuje pliki źródłowe, nazywane szablonami elementów, z tego samego folderu zip, który zawiera plik vstemplate. Szablon kopiuje te pliki do nowego projektu, odpowiednio je dostosowując.

Zastępowanie parametru szablonu

Gdy szablon kopiuje szablon elementu do nowego projektu, zastępuje wszystkie parametry szablonu ciągami, aby dostosować plik. Parametr szablonu to specjalny token, który jest poprzedzony znakiem dolara, na przykład $date$.

Przyjrzyjmy się typowej szablonowi elementu projektu. Wyodrębnij i zbadaj plik Program.cs w folderze 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
    }
}

Jeśli tworzysz nowy projekt aplikacji systemu Windows o nazwie Simple, szablon zastępuje $safeprojectname$ parametr nazwą projektu.

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

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

Aby uzyskać pełną listę parametrów szablonu, zobacz Parametry szablonu.

Wygląd wewnątrz elementu . Plik VSTemplate

Podstawowy plik vstemplate ma ten format

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

Przyjrzeliśmy się <sekcji TemplateData> w sekcji New Project Generation: Under the Hood, Part One. Tagi w tej sekcji służą do kontrolowania wyglądu okna dialogowego Nowy projekt .

Tagi w <sekcji TemplateContent> kontrolują generowanie nowych projektów i elementów projektu. <Oto sekcja TemplateContent> z pliku cswindowsapplication.vstemplate w folderze \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>

Tag <Project> steruje generowaniem projektu, a <tag ProjectItem> steruje generowaniem elementu projektu. Jeśli parametr ReplaceParameters ma wartość true, szablon dostosuje wszystkie parametry szablonu w pliku lub elemencie projektu. W tym przypadku wszystkie elementy projektu są dostosowywane, z wyjątkiem Ustawienia.settings.

Parametr TargetFileName określa nazwę i ścieżkę względną wynikowego pliku lub elementu projektu. Dzięki temu można utworzyć strukturę folderów dla projektu. Jeśli nie określisz tego argumentu, element projektu będzie miał taką samą nazwę jak szablon elementu projektu.

Wynikowa struktura folderów aplikacji systemu Windows wygląda następująco:

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

Pierwszy i tylko <tag Project> w szablonie brzmi:

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

Spowoduje to, że szablon Nowy projekt utworzy plik projektu Simple.csproj, kopiując i dostosowując element szablonu windowsapplication.csproj.

Projektant i odwołania

W Eksplorator rozwiązań widać, że folder Properties jest obecny i zawiera oczekiwane pliki. Ale co z odwołaniami do projektu i zależnościami plików projektanta, takimi jak Zasoby. Projektant.cs do pliku Resources.resx i Form1. Projektant.cs do pliku Form1.cs? Są one konfigurowane w pliku Simple.csproj podczas jego generowania.

Oto <element ItemGroup> z pliku Simple.csproj, który tworzy odwołania do projektu:

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

Widać, że są to sześć odwołań do projektu, które są wyświetlane w Eksplorator rozwiązań. Oto sekcja z innej <grupy> elementów. W celu zapewnienia przejrzystości usunięto wiele wierszy kodu. W tej sekcji Ustawienia.Projektant. plik cs zależny od Ustawienia.settings:

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