Создание нового проекта. Как это работает, часть 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 выглядит следующим образом:
Первый и единственный <тег 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>