在 “新建项目生成:下,第一部分 ”我们看到了 “新建项目 ”对话框的填充方式。 假设你选择了 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.settings 之外,所有项目项均已自定义。
TargetFileName 参数指定生成的项目文件或项的名称和相对路径。 这样,便可以为项目创建文件夹结构。 如果未指定此参数,则项目项的名称将与项目项模板相同。
生成的 Windows 应用程序文件夹结构如下所示:
模板中的第<一个且唯一的 Project>标签为:
<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> 的部分。 为了清楚起见,许多代码行已被删除。 本部分使Settings.Designer.cs依赖于 Settings.settings:
<ItemGroup>
<Compile Include="Properties\Settings.Designer.cs">
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
</ItemGroup>