如何:迁移使用模板创建项目的代码
更新:2007 年 11 月
创建项目的进程已在 Visual Studio 2005 中更新,以下过程向您说明如何更新使用自动化的现有应用程序来以编程方式创建代码。
在 Visual Studio .NET 2002 和 Visual Studio .NET 2003 中,创建基于项目模板的项目,方法是通过调用 AddFromTemplate 方法并在模板文件(如 .vsz 或 .cpp 或 .cs 等)的名称和路径中传递。
但是,在 Visual Studio 2005 中,项目模板文件在压缩的 .zip 文件中,因此,此进程不再工作。在创建项目模板中更为详细地介绍了这个新的项目模板系统。EnvDTE80 程序集提供新类型来访问这些新的压缩项目模板。AddFromTemplate 的更新版本以及新的方法(GetProjectTemplate 和 GetProjectItemTemplate)使您可根据它们的压缩模板文件以编程方式创建新的项目和项目项。
Visual Studio 2005 中的进程使用 GetProjectTemplate 来获取指定模板类型的路径,然后将该路径传递给 AddFromTemplate 方法来创建一个新的项目。这使您可以避免使用硬编码模板路径。下面的过程演示如何执行此操作。
升级新的项目节点
将旧版代码加载、复制或导入到 Visual Studio 中。
将项目和项目项模板位置设置为硬编码路径的代码部分替换为使用 GetProjectTemplate 或 GetProjectItemTemplate 方法的代码(在下一部分中)。
将 AddFromTemplate 方法调用替换为 AddFromTemplate 方法。
编译并运行此代码。
示例
下面的示例演示以编程方式创建项目和项目项的过程。它创建了一个 Visual Basic 控制台项目并将 HTML 页(项目项)添加到该项目中。
Sub CreatePrjAndPrjItemExample()
' Get a reference to the Solution2 object and create
' the path variables.
Dim soln As Solution2 = CType(DTE.Solution, Solution2)
Dim vbPrjTemplatePath As String
Dim vbItemTemplatePath As String
Dim vbPrjPath As String = "C:\MyNewVBProject"
Dim prjName As String = "New Visual Basic Console Project"
Dim prj As Project
Dim prjItems As ProjectItems
MsgBox("Starting...")
' Get the project template path for a Visual Basic console project.
vbPrjTemplatePath = _
soln.GetProjectTemplate("ConsoleApplication.zip", _
"VisualBasic")
' Create a new Visual Basic Console project by using the
' template obtained above.
soln.AddFromTemplate(vbPrjTemplatePath, vbPrjPath, prjName, False)
MsgBox("Done.")
' Reference the project and its items.
prj = soln.Projects.Item(1)
prjItems = prj.ProjectItems
' Get the path to the HTML Page template and add it to the project.
vbItemTemplatePath = soln.GetProjectItemTemplate("HTMLPage.zip", _
"VisualBasic")
prjItems.AddFromTemplate(vbItemTemplatePath, "A New HTML Page")
End Sub
public void CreatePrjAndPrjItemExample(DTE2 dte)
{
// Before running, set a reference to
// System.Windows.Forms.
// =============================
// Get a reference to the Solution2 object and create
// the path variables.
Solution2 soln = (Solution2) dte.Solution;
string vbPrjTemplatePath;
string vbItemTemplatePath;
string vbPrjPath = "C:\\MyNewVBProject";
string prjName = "New Visual Basic Console Project";
Project prj;
ProjectItems prjItems;
System.Windows.Forms.MessageBox.Show("Starting...");
// Get the project template path for a Visual Basic console project.
vbPrjTemplatePath = soln.GetProjectTemplate _
("ConsoleApplication.zip", VisualBasic");
// Create a new Visual Basic Console project by using
// the template obtained above.
soln.AddFromTemplate(vbPrjTemplatePath, vbPrjPath, prjName, false);
System.Windows.Forms.MessageBox.Show("Done.");
// Reference the project and its items.
prj = soln.Projects.Item(1);
prjItems = prj.ProjectItems;
// Get the path to the HTML Page template and add it to the
// project.
vbItemTemplatePath = soln.GetProjectItemTemplate _
("HTMLPage.zip", "VisualBasic");
prjItems.AddFromTemplate(vbItemTemplatePath, "A New HTML Page");
}