巨集專案物件模型
更新:2007 年 11 月
Visual Studio 包含用來撰寫和錄製巨集的工具 (如需概觀資訊,請參閱使用巨集自動執行重複的動作)。此外,Visual Studio 也包含公開 (Expose) 巨集專案的可程式化物件模型 (Object Model)。這個模型包含語言中性專案項目使用的一般擴充性物件以及巨集特定物件。巨集特定物件可以在 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 列舉型別 (Enumeration) 檢查專案類型。巨集中的型別轉換應該像這樣:
' 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 命名空間中其他幾個物件的容器 (Container),包括 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:這個物件表示巨集專案中所有參考的集合。下列方法不受支援,而且呼叫其中任一方法都會發生例外狀況: