生成新项目:揭秘,第 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 应用程序文件夹结构如下所示:
模板中的第一个和唯 <一的项目> 标记读取:
<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>