本演练演示如何创建显示在工具窗口的项目属性的托管 VSPackage。 使用 Visual Studio 包 " 项目模板,您可以创建示例托管 VSPackage。 使用自动化以生成的 VSPackage 显示在工具窗口的项目属性。 使用自动化,执行以下步骤来创建具有工具窗口的托管 VSPackage 然后其进行扩展:
创建托管 VSPackage。
调用自动化模型会在一个工具窗口的项目属性。
系统必备
若要完成本演练,您必须安装 Visual Studio 2010 SDK。
备注
有关 Visual Studio SDK 的更多信息,请参见 扩展 Visual Studio 概述。若要查找有关中所列如何下载 Visual Studio SDK,请 Visual Studio Extensibility Developer Center 参见 MSDN 网站上。
Visual Studio 包 " 项目模板的位置
Visual Studio 包 " 项目模板可以在 新项目 对话框的三个不同位置找到:
在 Visual Basic 扩展性下。 该项的默认语言是 Visual Basic。
在 C# 扩展性下。 该项目的默认语言是 C#。
在其他项下键入扩展性。 该项的默认语言是 C++。
创建托管 VSPackage
创建一个 VSPackage 项目命名 ProjectProps 使用 Visual Studio 包 " 项目模板。
有关如何创建托管 VSPackage 的更多信息,请参见 演练:使用 Visual Studio 创建包模板的菜单命令。
在 选择一种编程语言 页,将语言为 Visual C# 或 Visual Basic。
在 基本的 VSPackage 信息 页上,接受默认值。
在 选择 VSPackage 选项 页上,选择 菜单命令 和 工具窗口。
在 命令选项 页中,键入 " 我的工具箱中。
在 工具窗口 " 选项卡 页上,键入 ProjectProps 工具窗口。
单击**“完成”**。
模板生成名为 ProjectProps 的托管项目。
生成解决方案并验证它在编译时不会出错。
调用自动化模型会在一个工具窗口的项目属性
在 解决方案资源管理器,右击 ProjectProps 节点然后单击 添加引用。
在 添加引用 对话框中,在 .NET 选项卡中,双击 EnvDTE 然后单击 好。
这会建立对 EnvDTE 命名空间。
添加下面的行。 VSPkg.cs 或 VSPkg.vb 文件的顶部。
Imports EnvDTE
using EnvDTE;
添加下面的行。 ProjectProps 类的主体的顶部。
Public Shared dte As EnvDTE.DTE
public static EnvDTE.DTE dte;
添加下面的行。 ShowToolWindow 方法的主体的顶部。
dte = CType(GetService(GetType(DTE)), DTE)
dte = (DTE)GetService(typeof(DTE));
此代码使用 GetService 方法获取表示 Visual Studio 环境的 DTE 自动化对象。
打开 MyControl.cs 或 MyControl.vb 在 Visual Studio 设计器和移除 Visual Studio 包 " 项目模板插入的 click me! 按钮。
打开 MyControl.cs 或 MyControl.vb 在源代码编辑器。 添加下面的行。 MyControl 类的主体的顶部。
Private treeView1 As TreeView
private TreeView treeView1;
使用下行,替换 MyControl 构造函数的主体。
Public Sub New() ' This call is required by the Windows.Forms Form Designer. InitializeComponent() ' ' treeView1 ' Me.treeView1 = New System.Windows.Forms.TreeView() Me.SuspendLayout() Me.treeView1.Location = New System.Drawing.Point(20, 20) Dim project As EnvDTE.Project project = ProjectProps.dte.Solution.Projects.Item(1) Dim nodeNum As Integer = 0 Me.treeView1.Name = "ProjectPropsTree" Me.treeView1.Nodes.Add(New System.Windows.Forms.TreeNode(project.Name & " Properties")) For Each [property] As EnvDTE.Property In project.Properties Dim node As System.Windows.Forms.TreeNode = New System.Windows.Forms.TreeNode("Node" & nodeNum) node.Name = "Node" & nodeNum nodeNum = nodeNum + 1 node.Text = [property].Name treeView1.Nodes(0).Nodes.Add(node) Next [property] Me.treeView1.Size = New System.Drawing.Size(250, 500) Me.treeView1.TabIndex = 1 Me.Controls.Add(Me.treeView1) Me.ResumeLayout(False) End Sub
public MyControl() { // This call is required by the Windows.Forms Form Designer. InitializeComponent(); // // treeView1 // this.treeView1 = new System.Windows.Forms.TreeView(); this.SuspendLayout(); this.treeView1.Location = new System.Drawing.Point(20, 20); EnvDTE.Project project; project = ProjectProps.dte.Solution.Projects.Item(1); int nodeNum = 0; this.treeView1.Name = "ProjectPropsTree"; this.treeView1.Nodes.Add(new System.Windows.Forms.TreeNode(project.Name + " Properties")); foreach (EnvDTE.Property property in project.Properties) { System.Windows.Forms.TreeNode node = new System.Windows.Forms.TreeNode("Node" + nodeNum); node.Name = "Node" + nodeNum++; node.Text = property.Name; treeView1.Nodes[0].Nodes.Add(node); } this.treeView1.Size = new System.Drawing.Size(250, 500); this.treeView1.TabIndex = 1; this.Controls.Add(this.treeView1); this.ResumeLayout(false); }
使用项目属性名称值,该代码使用 DTE 自动化对象检索项目属性和动态填充工具窗口的树控件。
生成 ProjectProps 项目。
ProjectProps 项按 F5F5或 CTRL+F5 运行 Visual Studio 的实验性生成。
备注
Visual Studio 的两个版本现在处于打开状态。
在 Visual Studio Exp,创建或打开任何项目。
在 视图 菜单上,指向 其他窗口 然后单击 ProjectProps 工具窗口。
应使用项目属性名值。看到在工具窗口的树控件。