Поделиться через


Создание нового проекта. Как это работает, часть 2

В новом поколении проектов: под капотом часть 1 мы увидели, как заполняется диалоговое окно "Новый проект ". Предположим, что вы выбрали приложение Windows Visual C#, заполните текстовые поля "Имя" и "Расположение" и нажмите кнопку "ОК".

Создание файлов решения

Выбор шаблона приложения направляет Visual Studio для распаковки и открытия соответствующего vstemplate-файла, а также для запуска шаблона для интерпретации XML-команд в этом файле. Эти команды создают проекты и элементы проекта в новом или существующем решении.

Шаблон распаковывает исходные файлы, называемые шаблонами элементов, из той же ZIP-папки, содержащей vstemplate-файл. Шаблон копирует эти файлы в новый проект, настраивая их соответствующим образом.

Замена параметров шаблона

Когда шаблон копирует шаблон элемента в новый проект, он заменяет все параметры шаблона строками для настройки файла. Параметр шаблона — это специальный маркер, предшествующий знаку доллара, например $date$.

Рассмотрим типичный шаблон элемента проекта. Извлеките и проверьте Program.cs в папке 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
    }
}

При создании проекта приложения Windows с именем Simple шаблон заменяет $safeprojectname$ параметр именем проекта.

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

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

Полный список параметров шаблона см. в разделе Параметры шаблона.

Взгляд внутри . VSTemplate File

Базовый vstemplate-файл имеет этот формат

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

Мы рассмотрели <раздел TemplateData> в новом поколении проектов: под капюшоном, часть одна. Теги в этом разделе используются для управления внешним видом диалогового окна "Новый проект ".

Теги в <разделе TemplateContent> управляют созданием новых проектов и элементов проекта. Ниже приведен <раздел TemplateContent> из файла cswindowsapplication.vstemplate в папке \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>

<Тег Project> управляет созданием проекта, а <тег ProjectItem> управляет созданием элемента проекта. Если параметр ReplaceParameters имеет значение true, шаблон настраивает все параметры шаблона в файле проекта или элементе. В этом случае все элементы проекта настраиваются, за исключением Параметры.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">

Это указывает шаблону нового проекта создать файл проекта Simple.csproj, скопировав и настроив элемент шаблона windowsapplication.csproj.

Конструкторы и ссылки

В Обозреватель решений, что папка "Свойства" присутствует и содержит ожидаемые файлы. Но как насчет ссылок на проекты и зависимостей файлов конструктора, таких как Resources.Designer.cs в Resources.resx и Form1.Designer.cs в Form1.cs? Они настраиваются в файле Simple.csproj при его создании.

Ниже приведен элемент <ItemGroup> из Simple.csproj, который создает ссылки на проект:

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

Вы увидите, что это шесть ссылок на проекты, которые отображаются в Обозреватель решений. Ниже приведен раздел из другой <группы элементов>. Для ясности были удалены многие строки кода. В этом разделе Параметры. Designer.cs зависит от Параметры.settings:

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