如何使用 Visual C++ .NET 创建自定义项目模板






4.63/5 (17投票s)
一篇关于为 Visual C++ .NET 编写自己的项目模板的教程。
引言
许多程序员和学生会创建小型项目。这些项目通常基于相同的项目模板。在很多情况下,他们需要修改项目设置,每次必须这样做时,都会在重复的配置任务上浪费时间。出于这些原因,我决定撰写这篇文章;它解释了 Visual Studio .NET 模板的创建,并且可以作为创建更复杂的向导的一个很好的例子。
Visual C++ 自定义向导概述
这些信息并非详尽无遗,它解释了自定义向导最常见的功能。一个典型的项目向导模板包含以下文件:
[name].vsz
标识向导引擎,并提供上下文和可选的自定义参数。
[name].vsdir
此文件在 Visual Studio Shell 和向导项目中的项之间提供路由服务。
Templates.inf
Templates.inf 是一个文本文件,其中包含用于项目的模板列表。请注意,Template.inf 本身就是一个模板文件(您可以使用指令来指定要包含在项目中的文件)。
default.vcproj
包含项目类型信息的 XML 文件。
“模板文件”文件夹
此文件夹包含将包含在项目中的文件。请注意,硬盘上的位置是“$(ProjectDir)\Template Files\1033”。
“HTML 文件”文件夹
包含向导使用的 HTML 文件(用户界面),每个向导页面一个文件。第一个文件是“Default.htm”。硬盘上的位置是“$(ProjectDir)\Html\1033”。
“脚本文件”文件夹
自定义向导为每个项目创建一个名为“Default.js”的 JScript 文件。它还包括“Common.js”。这些文件包含 JScript 函数,让您可以访问 Visual C++ 对象模型来定制向导。
定义您的项目结构
请稍等,保持耐心。在开始创建模板之前,您必须创建一个默认项目。此项目必须包含您对默认项目模板的先决条件。将您所做的一切写在文本文件中,这些信息在向导创建新项目时将非常有用。
我的项目结构
对于本文,我选择创建一个 Win32 控制台项目来创建一个 C 项目。我的先决条件是:
- 一个“main.c”文件(可以重命名)。
- 包含任何其他声明(可选),如“stdio.h”、“string.h”、“conio.h”、“stdlib.h”和“math.h”。
- 添加一个
typedef
来创建bool
类型(可选)。 - 在 main 函数的末尾添加系统暂停(可选)。
- 添加作者、日期和项目描述字段(可选)。
- 最后,选择 main 函数声明中是否出现
argc
和argv
。
第一步 - 创建默认模板结构
创建模板结构非常简单;Visual Studio 会为您完成。首先,启动 Visual Studio .NET 并从“文件”菜单中选择“新建项目”。
在项目对话框中,选择“Visual C++ 项目”和“自定义模板”。
在“自定义向导”的“应用程序设置”页面上,将向导的友好名称更改为“C 控制台项目”,勾选“用户界面”复选框,并将向导页面数量设置为 2。此时已创建基础。
第二步 - 定义项目内容
添加 C 文件
现在,我们可以添加项目文件。在我的示例中,我只添加一个名为“main.c”的文件。
要添加此文件,请创建一个名为“main.c”的文件并将其保存在“$(ProjectDir)\Templates\1033”文件夹中。然后,在 Visual Studio 中的“模板文件”目录上右键单击,选择“添加现有项”,然后添加“main.c”文件。
删除无用的文件
从“模板文件”目录中删除“ReadMe.txt”和“Sample.txt”文件(在 Visual Studio 中以及从硬盘上删除)。
在“template.inf”中添加“main.c”条目
现在,我们修改“template.inf”文件以反映最后三个修改。为此,请将所有文件内容替换为“main.c”。
第三步 - 修改 HTML UI 和脚本
在此步骤中,我只解释三个修改。所有其他修改在技术上都是相同的。这些修改是:
- 重命名“main.c”文件,其新名称来自 HTML 文件中的输入控件。
- 根据复选框的选择,添加或不添加包含文件。
- 设置新项目的配置设置。
重命名“main.c”
在每个项目中,您都可以找到一个“default.js”文件。此文件包含一些在输出项目创建时调用的函数。在默认 HTML 文件中,有一个名为“MAIN_FILE_NAME
”的文本框,其中包含文件名;默认为“main”。要允许 Visual Studio 更改此文件名,您必须按如下方式修改“GetTargetName
”函数(该函数位于 default.js 文件中)。
function GetTargetName(strName, strProjectName)
{
try
{
var strTarget = strName;
if (strName == 'main.c')
strTarget = wizard.FindSymbol('MAIN_FILE_NAME') + '.c';
return strTarget;
}
catch(e)
{
throw e;
}
}
您可以通过在 HTML 文件中添加“SYMBOL
”标签来定义 HTML 控件的默认值。例如,要将“MAIN_FILE_NAME
”控件的默认值设置为 main,请在 HEAD
部分添加以下行。
<symbol name="MAIN_FILE_NAME" type="text" value="main"></symbol>
添加包含文件
例如,要在“main.c”文件中添加“stdio.h”文件,请在“Default.htm”文件中添加一个复选框控件。
<input id="INCLUDE_STDIO_H" type="checkbox" value="checkbox" name="checkbox">
之后,编辑“main.c”文件并根据以下示例进行修改:
[!if INCLUDE_STDIO_H]
#include <stdio.h>
[!endif]
要查看更多可能性,请编辑示例中的文件。
项目设置
修改项目设置要复杂一些。执行此操作的函数在“default.js”文件中,其名称为 AddConfig()
。
当您使用自定义向导创建项目时,生成的 AddConfig()
函数不包含很多信息,但它包含我们将用于更改项目设置的对象声明。
在我的项目中,我需要更改以下设置(config=debug)。以下表格列出了要更改的设置和进行此更改的示例代码。
Character Set:Use Multi-Byte Character Set
Debug Information Format:Program Database for Edit & Continue (/ZI)
Warning Level:Level 3 (/W3)
Optimization:Disabled (/Od)
Preprocessor Definitions:WIN32;_DEBUG;_CONSOLE
Runtime Library:Single-threaded Debug (/MLd)
Create/Use Precompiled Headers:Not Using Precompiled Headers
Enable Incremental Linking:Yes (/INCREMENTAL)
Generate Debug Info:Yes (/DEBUG)
代码
config.CharacterSet = charSetMBCS;
CLTool.DebugInformationFormat = debugOption.debugEditAndContinue;
CLTool.WarningLevel = warningLevelOption.warningLevel_3;
CLTool.Optimization = optimizeOption.optimizeDisabled;
CLTool.PreprocessorDefinitions = "WIN32;_DEBUG";_CONSOLE";
CLTool.RuntimeLibrary = rtSingleThreadedDebug;
CLTool.UsePrecompiledHeader = pchNone;
LinkTool.GenerateDebugInformation = true;
LinkTool.LinkIncremental = linkIncrementalYes;
JavaScript
var config = proj.Object.Configurations("Debug|Win32");
var CLTool = config.Tools("VCCLCompilerTool");
var LinkTool = config.Tools("VCLinkerTool");
有关更多信息,请参阅“Default.js”文件中的 AddConfig()
函数。
最后一步 - 准备安装项目自定义向导的设置
在设置文件中,您会找到允许自动安装此示例的脚本。如果您想为个人使用更改这些脚本,您将在“config.vbs”文件中找到安装参数。
使用 setup 安装此示例
解压“VCNetCustomWizard_demo.zip”的内容,并使用 cmd 文件(install.cmd、uninstall.cmd 和 settings.cmd)。
手动安装此示例
- 将“VCNetCustomWizard_demo.zip”文件复制到您的硬盘并解压到一个文件夹。
- 将“Setup Files\Project”文件夹的内容复制到 Visual Studio 安装目录下的“Vc7\VCProjects\Customs Wizards”文件夹(例如,c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\VCProjects\Customs Wizards\)。
- 将“Setup Files\Wizard”文件夹的内容复制到 Visual Studio 安装目录下的“Vc7\VCWizards\C Console v1”文件夹(例如,c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\VCWizards\C Console v1\)。
- 编辑文件“\Vc7\vcprojects\Customs Wizards\C Console Project.vsz”,并将“$$WIZARD_VERSION$$”替换为“7.1”,将“$$ABSOLUTE_PATH$$”替换为包含向导文件的路径(例如,c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\VCProjects\Customs Wizards\)。
注意
对于 Visual C++ 2005 或 2005 Express,将字符串“$$WIZARD_VERSION$$”替换为“8.0”,然后转到“config.vbs”文件查看安装路径。
结论
Visual C++ .NET 和 Visual Studio .NET 提供了一些自定义项目模板的功能;自定义项目可以帮助单个开发人员或开发团队通过自动化重复性任务来加速开发。它还可以为创建个人或企业标准提供良好的基础。其他一些 Visual Studio 功能,如加载项或宏,也可以帮助开发人员组织他们的工作。我鼓励开发人员研究这些不同的可能性,以消除不感兴趣的事情,并将精力集中在更重要的任务上。