演练:检索项目属性

本演练演示如何创建显示在工具窗口的项目属性的托管 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 包 " 项目模板可以在 新项目 对话框的三个不同位置找到:

  1. 在 Visual Basic 扩展性下。 该项的默认语言是 Visual Basic。

  2. 在 C# 扩展性下。 该项目的默认语言是 C#。

  3. 在其他项下键入扩展性。 该项的默认语言是 C++。

创建托管 VSPackage

  1. 创建一个 VSPackage 项目命名 ProjectProps 使用 Visual Studio 包 " 项目模板。

    有关如何创建托管 VSPackage 的更多信息,请参见 演练:使用 Visual Studio 创建包模板的菜单命令

    选择一种编程语言 页,将语言为 Visual C# 或 Visual Basic。

  2. 基本的 VSPackage 信息 页上,接受默认值。

  3. 选择 VSPackage 选项 页上,选择 菜单命令工具窗口

  4. 命令选项 页中,键入 " 我的工具箱中。

  5. 工具窗口 " 选项卡 页上,键入 ProjectProps 工具窗口。

  6. 单击**“完成”**。

    模板生成名为 ProjectProps 的托管项目。

  7. 生成解决方案并验证它在编译时不会出错。

调用自动化模型会在一个工具窗口的项目属性

  1. 解决方案资源管理器,右击 ProjectProps 节点然后单击 添加引用

  2. 添加引用 对话框中,在 .NET 选项卡中,双击 EnvDTE 然后单击

    这会建立对 EnvDTE 命名空间。

  3. 添加下面的行。 VSPkg.cs 或 VSPkg.vb 文件的顶部。

    Imports EnvDTE
    
    using EnvDTE;
    
  4. 添加下面的行。 ProjectProps 类的主体的顶部。

    Public Shared dte As EnvDTE.DTE
    
    public static EnvDTE.DTE dte;
    
  5. 添加下面的行。 ShowToolWindow 方法的主体的顶部。

    dte = CType(GetService(GetType(DTE)), DTE)
    
    dte = (DTE)GetService(typeof(DTE));
    

    此代码使用 GetService 方法获取表示 Visual Studio 环境的 DTE 自动化对象。

  6. 打开 MyControl.cs 或 MyControl.vb 在 Visual Studio 设计器和移除 Visual Studio 包 " 项目模板插入的 click me! 按钮。

  7. 打开 MyControl.cs 或 MyControl.vb 在源代码编辑器。 添加下面的行。 MyControl 类的主体的顶部。

    Private treeView1 As TreeView
    
    private TreeView treeView1;
    
  8. 使用下行,替换 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 自动化对象检索项目属性和动态填充工具窗口的树控件。

  9. 生成 ProjectProps 项目。

  10. ProjectProps 项按 F5F5CTRL+F5 运行 Visual Studio 的实验性生成。

    备注

    Visual Studio 的两个版本现在处于打开状态。

  11. 在 Visual Studio Exp,创建或打开任何项目。

  12. 视图 菜单上,指向 其他窗口 然后单击 ProjectProps 工具窗口

    应使用项目属性名值。看到在工具窗口的树控件。

请参见

任务

如何:创建和控制工具窗口

概念

Visual Studio SDK 和自动化

自动化模型