宏项目对象模型
更新:2007 年 11 月
Visual Studio 包括用于编写和记录宏的工具。(有关概述,请参见使用宏自动执行重复性操作。)Visual Studio 还包括公开宏项目的可编程对象模型。此模型包含两个常规扩展性对象,分别用于非特定语言项目项和特定于宏的对象。VSLangProj、VSLangProj2 和 VSLangProj80 命名空间中特定于宏的对象的用法与在 Visual Basic、Visual C# 和 Visual J# 项目中的用法相同。本主题讨论:
访问宏项目的扩展性对象
宏项目以及 VSProject 和 VSProject2 对象
VSLangProj、VSLangProj2 和 VSLangProj80 对象的特定于宏的元素
有关 VSLangProj、VSLangProj2 和 VSLangProj80 对象的更多信息,请参见项目扩展性介绍。有关常规扩展性的更多信息,请参见扩展 Visual Studio 环境。
访问宏项目的扩展性对象
通过 DTE2 扩展性对象的 MacrosIDE 属性访问宏项目。MacrosIDE 属性返回 DTE2 类型的对象,使您具有对宏集成开发环境 (IDE) 的访问权限,包括解决方案、项目、工具窗口、文档和事件。下面的宏列出了宏项目中的所有模块。
' Macro editor
Public Sub FindMacros()
Dim macroproject As Project
' Retrieve the first project in the Macros IDE.
macroproject = DTE.MacrosIDE.Solution.Projects.Item(1)
' Display the project's name.
MsgBox(macroproject.Name)
' Display each project item (module).
Dim projitem As ProjectItem
For Each projitem In macroproject.ProjectItems
MsgBox(projitem.Name)
Next
End Sub
宏项目和 VSLangProj 对象
在常规扩展性模型中,项目由泛型 Project 对象表示。Project 对象有个 Object 属性。在宏项目中,Object 属性返回 VSProject 类型的对象。由于 Object 属性的类型是 Object,因此必须将引用强制转换为 VSProject 类型。在进行此强制转换前,可以使用 PrjKind 或 PrjKind2 枚举检查项目类型。如果在一个宏中执行,该强制转换可能看起来类似于下面这样:
' Macro editor
Public Sub CastToVSProject()
' Retrieve the general extensibility object.
Dim macroproject As Project
macroproject = DTE.MacrosIDE.Solution.Projects.Item(1)
' Cast for the macro specific information.
Dim vsproj As VSLangProj.VSProject
' Can test type of project before cast.
If (macroproject.Kind = VSLangProj.PrjKind.prjKindVSAProject) Then
vsproj = CType(macroproject.Object, VSLangProj.VSProject)
End If
MsgBox(vsproj.Project.Name)
End Sub
VSProject2 对象是 VSLangProj、VSLangProj2 和 VSLangProj80 命名空间中其他几个对象的容器,这些对象包括:References、Reference、Imports 和 BuildManager 对象。
在常规扩展性模型中,项目项由一般 ProjectItem 对象表示。ProjectItem 对象有个 Object 属性。在宏项目中,Object 属性返回 VSProjectItem 类型的对象。由于 Object 属性的类型是 Object,因此必须将引用强制转换为 VSProjectItem 类型。如果在一个宏中执行,该强制转换可能看起来类似于下面这样:
' Macro editor
Public Sub CastToVSProjectItem()
Dim projitem As ProjectItem
Dim vsitem As VSLangProj.VSProjectItem
For Each projitem In _
DTE.MacrosIDE.Solution.Projects.Item(1).ProjectItems
vsitem = CType(projitem.Object, VSLangProj.VSProjectItem)
MsgBox(vsitem.ProjectItem.Name)
Next
End Sub
VSLangProj 对象的特定于宏的元素
VSLangProj、VSLangProj2 和 VSLangProj80 命名空间中的对象用于 Visual Basic、Visual C#、Visual J# 和宏项目。有一些特定于宏项目的枚举值。PrjKind 枚举有一个用于宏项目的值:prjKindVSAProject。PrjBrowseObjectCATID 枚举的下列值用于在“属性”窗口中扩展项:
VSLangProj 对象的特定于宏的行为
VSLangProj、VSLangProj2 和 VSLangProj80 对象的行为在 Visual Basic、Visual C#、Visual J# 和宏项目中略有不同。这是为了便于对象精确表示项目类型。对象的许多属性和方法不受宏项目支持,如下所示。
VSProject 此对象表示项目的特定于宏的细节。
BuildManager 此属性不受支持,并且访问此属性会引发异常。
CopyProject 此方法不受支持,并且调用此方法会引发异常。
WorkOffline 此属性始终返回 False。虽然尝试设置此属性并不会引发异常,但是不能将该属性设置为 True。
VSProjectItem 此对象表示项目项的特定于宏的细节。
- RunCustomTool 此方法不受支持,并且调用此方法会引发异常。
ProjectProperties3 这些属性描述 Visual Basic、Visual C#、Visual J# 和宏项目。以下属性不受支持:
|
FileProperties2 这些属性描述 Visual Basic、Visual C#、Visual J# 和宏项目项。以下文件属性不受支持,并且访问这些属性将引发错误:
以下 FolderProperties2 不受支持,并且访问这些属性将引发错误。
|
ProjectConfigurationProperties3 这些属性描述 Visual Basic、Visual C#、Visual J# 和宏部署配置。以下文件属性不受支持,并且访问这些属性将引发错误:
Reference3 此对象表示一个项目引用。以下属性不受支持,访问此属性将引发异常:
References 此对象表示宏项目中所有引用的集合。以下方法不受支持,调用这些方法之一将引发异常: