Geração de novo projeto: Bastidores, parte dois
Em New Project Generation: Under the Hood, Part One , vimos como a caixa de diálogo Novo Projeto é preenchida. Vamos supor que você selecionou um Aplicativo Visual C# do Windows, preencheu as caixas de texto Nome e Local e clicou em OK.
Gerando os arquivos de solução
Escolher um modelo de aplicativo direciona o Visual Studio para descompactar e abrir o arquivo .vstemplate correspondente e para iniciar um modelo para interpretar os comandos XML nesse arquivo. Esses comandos criam projetos e itens de projeto na solução nova ou existente.
O modelo descompacta os arquivos de origem, chamados modelos de item, da mesma pasta .zip que contém o arquivo .vstemplate. O modelo copia esses arquivos para o novo projeto, personalizando-os de acordo.
Substituição de parâmetro de modelo
Quando o modelo copia um modelo de item para um novo projeto, ele substitui quaisquer parâmetros de modelo por cadeias de caracteres para personalizar o arquivo. Um parâmetro de modelo é um token especial que é precedido e seguido por um cifrão, por exemplo, $date$.
Vejamos um modelo de item de projeto típico. Extraia e examine Program.cs na pasta Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033\WindowsApplication.zip pasta.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace $safeprojectname$
{
static class Program
{
// source code deleted here for brevity
}
}
Se você criar um novo projeto de aplicativo do Windows chamado Simples, o modelo substituirá o $safeprojectname$
parâmetro pelo nome do projeto.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Simple
{
static class Program
{
// source code deleted here for brevity
}
}
Para ver uma lista completa dos parâmetros de modelo, consulte Parâmetros de Modelo.
Um olhar dentro de um . Arquivo VSTemplate
Um arquivo .vstemplate básico tem este formato
<VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
<TemplateData>
</TemplateData>
<TemplateContent>
</TemplateContent>
</VSTemplate>
Examinamos a <seção TemplateData> na Nova Geração de Projeto: Sob o Capô, Parte Um. As marcas nesta seção são usadas para controlar a aparência da caixa de diálogo Novo Projeto .
As marcas na <seção TemplateContent> controlam a geração de novos projetos e itens de projeto. Aqui está a <seção TemplateContent> do arquivo cswindowsapplication.vstemplate na pasta \Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033\WindowsApplication.zip pasta.
<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>
A <marca Project controla a geração de um projeto e a marca ProjectItem>> controla a <geração de um item de projeto. Se o parâmetro ReplaceParameters for true, o modelo personalizará todos os parâmetros do modelo no arquivo ou item do projeto. Nesse caso, todos os itens de projeto são personalizados, exceto Settings.settings.
O parâmetro TargetFileName especifica o nome e o caminho relativo do arquivo ou item de projeto resultante. Isso permite que você crie uma estrutura de pastas para seu projeto. Se você não especificar esse argumento, o item de projeto terá o mesmo nome que o modelo de item de projeto.
A estrutura de pastas de aplicativos do Windows resultante tem esta aparência:
A primeira e única <tag Project> no modelo diz:
<Project File="WindowsApplication.csproj" ReplaceParameters="true">
Isso instrui o modelo Novo projeto a criar o arquivo de projeto Simple.csproj copiando e personalizando o item de modelo windowsapplication.csproj.
Designers e Referências
Você pode ver no Gerenciador de Soluções que a pasta Propriedades está presente e contém os arquivos esperados. Mas e quanto às referências de projeto e dependências de arquivo de designer, como Resources.Designer.cs para Resources.resx e Form1.Designer.cs para Form1.cs? Eles são configurados no arquivo Simple.csproj quando ele é gerado.
Aqui está o <ItemGroup> de Simple.csproj que cria as referências do projeto:
<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>
Você pode ver que essas são as seis referências de projeto que aparecem no Gerenciador de Soluções. Aqui está uma seção de outro <ItemGroup>. Muitas linhas de código foram excluídas para maior clareza. Esta seção torna Settings.Designer.cs dependente de Settings.settings:
<ItemGroup>
<Compile Include="Properties\Settings.Designer.cs">
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
</ItemGroup>