共用方式為


巨集專案物件模型

更新:2007 年 11 月

Visual Studio 包含用來撰寫和錄製巨集的工具 (如需概觀資訊,請參閱使用巨集自動執行重複的動作)。此外,Visual Studio 也包含公開 (Expose) 巨集專案的可程式化物件模型 (Object Model)。這個模型包含語言中性專案項目使用的一般擴充性物件以及巨集特定物件。巨集特定物件可以在 VSLangProjVSLangProj2VSLangProj80 命名空間中找到,其使用方式與在 Visual Basic、Visual C# 和 Visual J# 專案中完全相同。這個主題將討論:

如需 VSLangProjVSLangProj2VSLangProj80 物件的詳細資訊,請參閱專案擴充性簡介;如需一般擴充性的詳細資訊,則請參閱擴充 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 型別。在轉換之前,您可以先使用 PrjKindPrjKind2 列舉型別 (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 物件是 VSLangProjVSLangProj2VSLangProj80 命名空間中其他幾個物件的容器 (Container),包括 ReferencesReferenceImportsBuildManager 物件。

在一般擴充性模型中,專案項目是以泛用 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 物件的巨集特定項目

VSLangProjVSLangProj2VSLangProj80 命名空間中的物件可用於 Visual Basic、Visual C#、Visual J# 和巨集專案。巨集專案具有一些特定的列舉型別值。PrjKind 列舉型別具有巨集專案的值,即 prjKindVSAProjectPrjBrowseObjectCATID 列舉型別則具有下列值,可用來擴充 [屬性] 視窗中的項目:

prjCATIDVSAFolderBrowseObject

prjCATIDVSAFileBrowseObject

prjCATIDVSAConfig

prjCATIDVSAReferenceBrowseObject

VSLangProj 物件的巨集特定行為

VSLangProjVSLangProj2VSLangProj80 物件的行為會根據 Visual Basic、Visual C#、Visual J# 和巨集專案而略有不同。如此一來物件才能精確地表示專案類型。這些物件的許多屬性和方法在巨集專案中並不受支援,如下所列:

VSProject:這個物件表示專案的巨集特定詳細資訊。

  • BuildManager:這個屬性不受支援,而且存取這個屬性將會擲回例外狀況。

  • CopyProject:這個方法不受支援,而且呼叫這個方法將會擲回例外狀況。

  • WorkOffline:這個屬性一定會傳回 False。嘗試設定這個屬性並不會擲回例外狀況,但是不能將這個屬性設定為 True。

VSProjectItem:這個物件表示專案項目的巨集特定詳細資訊。

  • RunCustomTool:這個方法不受支援,而且呼叫這個方法將會擲回例外狀況。

ProjectProperties3:這些屬性用來描述 Visual Basic、Visual C#、Visual J# 和巨集專案。不受支援的屬性如下:

ActiveFileSharePath

FullPath

ApplicationIcon

LinkRepair

AssemblyName

OfflineURL

AssemblyKeyContainerName

OutputFileName

AssemblyOriginatorKeyFile

OutputType

AssemblyOriginatorKeyMode

URL

DefaultClientScript

WebAccessMethod

DefaultHTMLPageLayout

WebServer

DefaultTargetSchema

WebServerVersion

ActiveFileSharePath

 

FileProperties2:這些屬性用來描述 Visual Basic、Visual C#、Visual J# 和巨集專案項目。下列檔案屬性不受支援,而且存取這些屬性將會擲回錯誤:

Author

FullPath

BuildAction

IsDependentFile

IsCustomToolOutput

IsDesignTimeBuildInput

CustomToolNamespace

IsLink

CustomToolOutput

HTMLTitle

DateCreated

LocalPath

DateModified

ModifiedBy

Extension

SubType

FileName

URL

下列 FolderProperties2 屬性不受支援,而且存取這些屬性將會擲回錯誤:

FullPath

URL

LocalPath

 

ProjectConfigurationProperties3:這些屬性用來描述 Visual Basic、Visual C#、Visual J# 和巨集部署組態。下列檔案屬性不受支援,而且存取這些屬性將會擲回錯誤:

AllowUnsafeBlocks

IntermediatePath

BaseAddress

OutputPath

CheckForOverflowUnderflow

StartAction

DocumentationFile

StartArguments

EnableASPXDebugging

StartProgram

EnableUnmanagedDebugging

StartURL

IncrementalBuild

StartWithIE

Reference3:這個物件表示一個專案參考。下列屬性不受支援,而且存取這個屬性會發生例外狀況:

References:這個物件表示巨集專案中所有參考的集合。下列方法不受支援,而且呼叫其中任一方法都會發生例外狀況:

AddActiveX

AddProject

請參閱

概念

專案擴充性簡介

參考

MacrosIDE

VSProject

Imports

VSProjectItem

BuildManager

VSProject2

Reference3