如何:访问特定项目类型的属性

更新:2007 年 11 月

Visual Studio 常规自动化模型提供 Properties 集合,可使用它访问任何 Visual Studio 项目类型的 Properties 集合。除此以外,项目属性还使您能够控制安全设置、程序集名称等。

若要手动设置和检查项目属性,请在 Visual Studio 集成开发环境 (IDE) 中打开一个项目。在“项目”菜单上单击“属性”。“属性”窗口有多个选项卡,并且每个窗格均列出了用于定义和控制项目行为的属性。自动化模型允许您以编程方式控制这些设置。具体说来,ProjectProperties3 中的属性使您能够控制 Visual C# 和 Visual J# 项目的“属性”页中的“应用程序”、“资源”、“设置”、“引用路径”和“签名”窗格中的项目属性。在 VBProjectProperties3 中定义的属性使您能够控制 Visual Basic 项目的属性设置,这些设置可在“属性”页的“应用程序”、“资源”、“设置”、“引用”和“签名”窗格中找到。

Visual C# 和 Visual J# 项目的属性在 ProjectProperties3 中定义。Visual Basic 项目的属性在 VBProjectProperties3 中定义。MyApplicationMyType 属性只特定于 Visual Basic 项目。VBProjectProperties3 中的其他属性与 ProjectProperties3 中的属性相同。

不能通过直接将 Properties 对象强制转换为 ProjectProperties3VBProjectProperties3 对象来访问这些属性。而是必须通过 Properties 集合访问这些属性,方法是以字符串的形式提供特定项目类型的属性名称以指定 Property。例如,代码 EnvDTE.Property prop = EnvDTE.Properties.Item("ApplicationIcon"); 使您能够访问 ApplicationIcon 属性。

实际上,在 ProjectProperties3VBProjectProperties3 中定义的属性是可作为项目属性项进行访问的特定项目的可用属性的引用列表。

下面的步骤详细说明了如何在 Visual Studio 外接程序中以编程方式访问这些属性。

ms228952.alert_note(zh-cn,VS.90).gif说明:

显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您的当前设置或版本。这些过程是使用现用的常规开发设置开发的。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置

访问特定项目类型的属性

  1. 使用 Visual C# 创建 Visual Studio 外接程序项目。

  2. 在“项目”菜单上单击“添加引用”,再单击“.NET”选项卡,选择“VSLangProj”、“VSLangProj2”和“VSLangProj80”,然后单击“确定”。

  3. 将以下 using 语句添加到 Connect.cs 文件顶部。

    using VSLangProj;
    using VSLangProj2;
    using VSLangProj80;
    
  4. 将下面的方法调用添加到 OnConnection 方法。

    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    VSProjectProperties(_applicationObject);
    
  5. 添加 VSProjectProperties 方法,使其紧跟在 OnConnection 方法的下方。

    public void VSProjectProperties(DTE2 dte)
    {
        try
        {
            // Open a Visual C#, Visual J#, or Visual Basic project
            // before running this add-in.
            Project project;
            project = _applicationObject.Solution.Projects.Item(1);
            Property prop;
            prop = project.Properties.Item("AssemblyName");
            MessageBox.Show("The assembly name is: " 
    + prop.Value .ToString());
            prop.Value = "MyTestAssembly";
            MessageBox.Show("The assembly name is now: " 
    + prop.Value.ToString());
            // If the project is a Visual Basic project, set
            // the MyApplication property.
            if (project.Kind == PrjKind.prjKindVBProject)
            {
                MessageBox.Show("The project is a Visual 
    Basic Project");
                prop = project.Properties.Item("MyType");
                MessageBox.Show("The MyType value is: " 
    + prop.Value.ToString());
                prop.Value = "Class Library";
                MessageBox.Show("The MyType value is now: " 
    + prop.Value.ToString());
            }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    

    VSProjectProperties 方法通过将 AssemblyName 属性作为 Property 项字符串传递给 Properties 集合,既可以设置也可以获取此属性。如果项目为 Visual Basic 项目,则 VSProjectProperties 方法也可以设置和获取 MyType 属性。

    示例部分列出了完整的代码。

  6. 通过单击“生成”菜单上的“生成解决方案”生成外接程序。

  7. 在 Visual Studio IDE 中打开一个 Visual C#、Visual J# 或 Visual Basic 项目。

  8. 在“工具”菜单上单击“外接程序管理器”,再从“外接程序管理器”对话框中选择您要的外接程序。单击“确定”以运行外接程序。

  9. 单击“项目”菜单上的“属性”,然后在“属性”窗口中选择“应用程序”选项卡,验证程序集名称是否已被更改。

    “程序集名称”字段反映了您以编程方式所做的更改。

示例

下面的示例是一个简单的 Visual Studio 外接程序,它演示了如何通过使用 Visual Studio 中的自动化来访问特定于项目类型的属性。

using System;
using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using System.Windows.Forms;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
namespace myAddin
    public void OnConnection(object application, 
ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        VSProjectProperties(_applicationObject);
    }
    public void VSProjectProperties(DTE2 dte)
    {
        try
        {
            // Open a Visual C#, Visual J#, or Visual Basic project
            // before running this add-in.
            Project project;
            project = _applicationObject.Solution.Projects.Item(1);
            Property prop;
            prop = project.Properties.Item("AssemblyName");
            MessageBox.Show("The assembly name is: " 
+ prop.Value .ToString());
            prop.Value = "MyTestAssembly";
            MessageBox.Show("The assembly name is now: " 
+ prop.Value.ToString());
            // If the project is a Visual Basic project, set
            // the MyApplication property.
            if (project.Kind == PrjKind.prjKindVBProject)
            {
                MessageBox.Show
("The project is a Visual Basic Project");
                prop = project.Properties.Item("MyType");
                MessageBox.Show("The MyType value is: " 
+ prop.Value.ToString());
                prop.Value = "Class Library";
                MessageBox.Show("The MyType value is now: " 
+ prop.Value.ToString());
            }
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
Imports System
Imports Microsoft.VisualStudio.CommandBars
Imports Extensibility
Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80

    Public Sub OnConnection(ByVal application As Object, _
 ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, _
 ByRef custom As Array) Implements IDTExtensibility2.OnConnection
        _applicationObject = CType(application, DTE2)
        _addInInstance = CType(addInInst, AddIn)
        VSProjectProperties(_applicationObject)
    End Sub
    Sub VSProjectProperties(ByVal dte As DTE2)
        ' Open a Visual C#, Visual J#, or Visual Basic project
        ' before running this add-in.
        Try
            Dim project As Project
            project = _applicationObject.Solution.Projects.Item(1)
            Dim prop As [Property]
            prop = project.Properties.Item("AssemblyName")
            MsgBox("The assembly name is: "  _
            & prop.Value.ToString())
            prop.Value = "MyTestAssembly"
            MsgBox("The assembly name is now: "  _
            & prop.Value.ToString())
            ' If the project is a Visual Basic project, set
            ' the MyApplication property.
            If project.Kind = PrjKind.prjKindVBProject Then
                MsgBox("The project is a Visual Basic Project")
                prop = project.Properties.Item("MyType")
                MsgBox("The MyType value is: "  _
                & prop.Value.ToString())
                prop.Value = "Class Library"
                MsgBox("The MyType value is now: "  _
                & prop.Value.ToString())
            End If
        Catch ex As System.Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

编译代码

若要编译此代码,请创建一个新的 Visual Studio 外接程序项目,然后用本示例中的代码替换 OnConnection 方法的代码。有关如何运行外接程序的信息,请参见 如何:使用外接程序管理器控制外接程序

请参见

概念

项目属性

其他资源

访问特定于项目类型的项目、项目项和配置属性