项目扩展性介绍

更新:2007 年 11 月

只需向项目添加对以下 VSLangProj 程序集的引用,便可使用该对象模型:VSLangProj.dll、VSLangProj2.dll、VSLangProj80.dll 和 VSLangProj90.dll 程序集。有关更多信息,请参见如何:在 Visual Studio 中添加或移除引用 (Visual Basic)。即,该对象模型可供宏、外接程序以及必须扩展或自动化 IDE 的任何类型的项目使用。宏是通过使用 Visual Basic 在 Macros 集成开发环境中编写而成的。主题中的示例以 Visual Basic 和 Visual C# 语言编写而成。有关如何运行这些示例的更多信息,请参见如何:编译和运行自动化对象模型代码示例。可以采用诸如 Visual Basic、Visual C#、Visual C++ 和 Visual J# 之类的任何 Visual Studio 托管语言来编写外接程序。VSLangProjVSLangProj2VSLangProj80VslangProj90 成员的参考主题包括这些语言中的每种语言的语法。有关自动化项目类型和自动化功能的描述,请参见 创建外接程序和向导

VSLangProj、VSLangProj2、VSLangProj80 和 VSLangProj90 命名空间

这些命名空间包含 Visual Basic、Visual C# 和 Visual J# 项目的所有类、接口和枚举。有关命名空间中对象的完整列表,请参见 项目的 Visual Basic 和 Visual C# 扩展性对象模型

使用含有 EnvDTE 程序集的 VSLangProj 程序集可能出现的错误

如果创建的项目引用了一个或多个 VSLangProj 程序集和 EnvDTE 程序集,在运行时则可能收到以下错误:

“未处理的异常:System.IO.FileNotFoundException:加载 EnvDTE 文件时出错,版本=7.0.3300.0”

运行时类型解析冲突导致该错误。也就是说,Visual Studio 2005 附带的 EnvDTE 版本为 8.0.xx,但是项目的配置引用却需要该程序集的早期版本(7.0.xx 版)。若要解决此问题,必须将较新版本的 EnvDTE 的绑定重定向添加到项目的 (.config) 配置文件中。这将使 Visual Studio 能够加载较新版本的 EnvDTE,并防止错误发生。

若要实现这一点,请将“应用程序配置文件”添加到项目中,然后将其内容替换为:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-
        com:asm.v1" appliesTo="v2.0.50318">
            <dependentAssembly>
                <assemblyIdentity name="EnvDTE" publicKeyToken=
                "b03f5f7f11d50a3a"/>
                <bindingRedirect oldVersion="7.0.3300.0" 
                newVersion="8.0.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

VSProject2 对象

该对象提供对扩展性模型中的其他对象的访问。DTE 对象是 Visual Studio 自动化模型中的顶级对象。在常规扩展性模型中,项目由泛型 Project 对象表示。Project 对象有个 Object 属性。该属性的类型在运行时由项目语言决定。在 Visual Basic、Visual C# 或 Visual J# 项目中,Object 属性返回 VSProject2 类型的对象。由于 Object 属性的类型是 Object,因此必须将引用强制转换为类型 VSProject2。在宏中,如果第一个项目是 Visual Basic 项目,那么强制转换将类似于:

Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Dim proj As EnvDTE.Project
Dim vsproject As VSLangProj80.VSProject2
proj = DTE.Solution.Projects.Item(1)
vsproject = CType(proj.Object, VSLangProj80.VSProject2)
using EnvDTE;
using EnvDTE80;
using EnvDTE90;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
EnvDTE.Project proj;
VSLangProj80.VSproject2 vsproject;
proj = DTE2.Solution.Projects.Item(1);
vsproject = (VSLangProj80.VSProject2)proj;

在引用 VSProject2 项之后,即可操作项目的属性、配置、文件、文件夹、Imports 语句和引用。

有关更多信息,请参见 VSProject2 对象介绍

References 和 Reference 对象

VSProject2 对象包含的 References 属性含有 Reference3 对象的集合。Reference3 对象表示一个项目引用,它主要是一个支持 Remove 方法的只读对象。References 对象支持添加引用(COM、.NET 程序集、ActiveX 和其他项目)和引发事件(添加、移除和更改引用)。

References 对象不包含项目的 Web 引用。可通过访问 WebReferencesFolder 属性的 ProjectItems 属性检索项目的 Web 引用。

有关更多信息和代码示例,请参见 ReferenceReference3 对象、References 集合、References 属性和 WebReferencesFolder 属性。

Imports 对象

VSProject2 对象包含的 Imports 属性维护应用于整个 Visual Basic 项目的 Imports 语句的集合。如果向该集合添加一条 Imports 语句,则不必将相应的 Imports 语句(例如 Imports VSLangProj)添加到代码文件中。该对象支持添加和移除 Imports 语句以及为响应添加和移除语句而引发事件。Visual C# 项目中没有等效项,当将其应用于 Visual C# 项目时,VSProject2.Imports 属性返回 Nothing 或 null。有关更多信息,请参见 Imports

VSProjectItem 和 BuildManager 对象

VSProjectItem 对象是 VSProject2 对象的项目项副本。在常规扩展性模型中,泛型 ProjectItem 对象表示一个项目项。Object 属性为 Object 类型,在 Visual Basic 或 Visual C# 项目中,该属性的类型为 VSProjectItem。在宏中,将该对象强制转换为类型 VSProjectItem 可能类似于:

Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Dim pi As VSProjectItem
pi = CType(DTE2.Solution.Projects.Item(1).ProjectItems.Item(1)._
    Object, VSProjectItem)
using EnvDTE;
using EnvDTE80;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
using VSLangProj90;
EnvDTE.Project proj;
VSLangProj.VSProjectItem pi;
Pi = (VSProject2)DTE2.Solution.Projects.Item(1).ProjectItems.Item(1).
Object;

VSProjectItem 对象包含链接到父项目项和项目的属性,以及一个用于在该项上强制执行某自定义工具的方法。BuildManager 对象处理自定义工具输出。有关更多信息,请参见 RunCustomTool 方法、BuildManager 对象介绍VSProjectItem 对象和 BuildManager 对象。

Properties 属性

常规扩展性模型在三个对象中具有 Properties 属性:

  • Project 对象   该对象中的属性等效于 IDE 中项目的“属性页”对话框的“通用属性”选项卡中的属性。

  • Configuration 对象   该对象中的属性等效于 IDE 中项目的“属性页”对话框的“配置属性”选项卡中的属性。

  • ProjectItem 对象   该对象中的属性等效于当在“解决方案资源管理器”中选择了一个项目项时“属性”窗口中的属性。

  • 在每种情况下,Properties 属性都是类型为 Property 的对象的集合。可通过指定属性的从 1 开始的索引或其名称,从该集合中获得 Property 对象。该集合的内容取决于语言。在项目项的情况下,此内容还取决于该项是文件还是文件夹。

请参见

概念

Visual Studio 自动化的范围

其他资源

创建外接程序和向导