项目扩展性介绍
更新: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 托管语言来编写外接程序。VSLangProj、VSLangProj2、VSLangProj80 和 VslangProj90 成员的参考主题包括这些语言中的每种语言的语法。有关自动化项目类型和自动化功能的描述,请参见 创建外接程序和向导。
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 引用。
有关更多信息和代码示例,请参见 Reference 和 Reference3 对象、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 对象。该集合的内容取决于语言。在项目项的情况下,此内容还取决于该项是文件还是文件夹。