Partilhar via


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:

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

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>