生成新项目:揭秘,第 2 部分

“新建项目生成:下,第一部分”我们看到了“新建项目”对话框的填充方式。 假设你选择了 Visual C# Windows 应用程序,填写了“名称和位置”文本框,然后单击“确定”。

生成解决方案文件

选择应用程序模板会指示 Visual Studio 解压缩并打开相应的 .vstemplate 文件,并启动模板来解释此文件中的 XML 命令。 这些命令在新的或现有解决方案中创建项目和项目项。

该模板从保存 .vstemplate 文件的同一 .zip 文件夹中解包源文件(称为项模板)。 该模板会将这些文件复制到新项目,并相应地对其进行自定义。

模板参数替换

当模板将项模板复制到新项目时,它会将任何模板参数替换为用于自定义文件的字符串。 模板参数是前面和后跟美元符号的特殊令牌,例如,$date$。

让我们看看典型的项目项模板。 提取并检查 Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033\WindowsApplication.zip 文件夹中的 Program.cs。

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

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

如果创建新的名为 Simple 的 Windows 应用程序项目,模板会将 $safeprojectname$ 参数替换为项目的名称。

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

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

有关模板参数的完整列表,请参阅模板参数

一个内在一个外观。VSTemplate 文件

基本 .vstemplate 文件具有此格式

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

我们查看<了新项目生成中的 TemplateData> 部分:下,第一部分。 本部分中的标记用于控制“新建项目”对话框的外观

TemplateContent> 节中的<标记控制新项目和项目项的生成。 下面是 <\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033\WindowsApplication.zip 文件夹中 cswindowsapplication.vstemplate 文件中的 TemplateContent> 部分。

<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 File="WindowsApplication.csproj" ReplaceParameters="true">

这将指示新建项目模板通过复制和自定义模板项 windowsapplication.csproj 来创建 Simple.csproj 项目文件。

设计器和引用

可以在解决方案资源管理器中看到“属性”文件夹存在并包含预期的文件。 但是,项目引用和设计器文件依赖项,例如 Resources.Designer.cs 到 Resources.resx,以及 Form1.Designer.cs 到 Form1.cs 呢? 在生成 Simple.csproj 文件中设置这些设置。

下面是 <Simple.csproj 中的 ItemGroup> ,用于创建项目引用:

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

可以看到这些是解决方案资源管理器中显示的六个项目引用。 下面是另 <一个 ItemGroup> 中的一个部分。 为了清楚起见,许多代码行已被删除。 本部分设置。Designer.cs 依赖于 设置.settings:

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