Freigeben über


Das Makroprojekt-Objektmodell

Aktualisiert: November 2007

Visual Studio enthält Tools zum Schreiben und Aufzeichnen von Makros. (Eine Übersicht finden Sie unter Automatisieren von wiederkehrenden Aktionen mit Makros.) Visual Studio enthält zudem ein programmierbares Objektmodell, das Makroprojekte verfügbar macht. Dieses Modell enthält allgemeine Erweiterbarkeitsobjekte für sprachneutrale Projektelemente sowie makrospezifische Objekte. Die makrospezifischen Objekte gehören zum VSLangProj-, VSLangProj2- und VSLangProj80-Namespace und werden wie in Visual Basic-, Visual C#- und Visual J#-Projekten verwendet. In diesem Themen werden folgende Themen behandelt:

Weitere Informationen zum VSLangProj-Objekt, VSLangProj2-Objekt und VSLangProj80-Objekt finden Sie unter Einführung in die Projekterweiterbarkeit. Weitere Informationen zur allgemeinen Erweiterbarkeit finden Sie unter Erweitern der Visual Studio-Umgebung.

Zugreifen auf die Erweiterbarkeitsobjekte eines Makroprojekts

Auf Makroprojekte kann über die MacrosIDE-Eigenschaft des DTE2-Erweiterbarkeitsobjekts zugegriffen werden. Die MacrosIDE-Eigenschaft gibt ein Objekt vom Typ DTE2 zurück, sodass Sie über Zugriff auf die Makro-IDE (Integrated Development Environment) verfügen, einschließlich Projektmappen, Projekten, Toolfenstern, Dokumenten und Ereignissen. Mit dem folgenden Makro werden sämtliche Module in einem Makroprojekt aufgeführt.

' 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 

Makroprojekte und die VSLangProj-Objekte

Im allgemeinen Erweiterbarkeitsmodell wird ein Projekt durch das generische Project-Objekt dargestellt. Das Project-Objekt verfügt über eine Object-Eigenschaft. In Makroprojekten gibt die Object-Eigenschaft ein Objekt vom Typ VSProject zurück. Da der Typ der Object-Eigenschaft object lautet, müssen Sie den Verweis in den Typ VSProject umwandeln. Mit der PrjKind-Enumeration oder der PrjKind2-Enumeration können Sie den Projekttyp überprüfen, bevor Sie die Umwandlung ausführen. In einem Makro sieht die Umwandlung wie folgt aus:

' 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

Das VSProject2-Objekt fungiert als Container für zahlreiche andere Objekte im VSLangProj-Namespace, VSLangProj2-Namespace und VSLangProj80-Namespace, u. a. für das References-Objekt, das Reference-Objekt, das Imports-Objekt und das BuildManager-Objekt.

Im allgemeinen Erweiterungsmodell wird ein Projektelement durch das generische ProjectItem-Objekt repräsentiert. Das ProjectItem-Objekt verfügt über eine Object-Eigenschaft. In Makroprojekten gibt die Object-Eigenschaft ein Objekt vom Typ VSProjectItem zurück. Da der Typ der Object-Eigenschaft Object lautet, müssen Sie den Verweis in den Typ VSProjectItem umwandeln. In einem Makro sieht die Umwandlung wie folgt aus:

' 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

Makrospezifische Elemente der VSLangProj-Objekte

Die Objekte im VSLangProj-Namespace, VSLangProj2-Namespace und VSLangProj80-Namespace werden für Visual Basic-, Visual C#-, Visual J#- und Makroprojekte verwendet. Einige Enumerationswerte beschränken sich auf Makroprojekte. Die PrjKind-Enumeration verfügt über einen Wert für Makroprojekte, prjKindVSAProject. Die PrjBrowseObjectCATID-Enumeration verfügt über die folgenden Werte zum Erweitern der Elemente im Eigenschaftenfenster:

prjCATIDVSAFolderBrowseObject

prjCATIDVSAFileBrowseObject

prjCATIDVSAConfig

prjCATIDVSAReferenceBrowseObject

Makrospezifisches Verhalten der VSLangProj-Objekte

Das Verhalten des VSLangProj-Objekts, des VSLangProj2-Objekts und des VSLangProj80-Objekts ist in Visual Basic-, Visual C#-, Visual J#- und Makroprojekten jeweils leicht unterschiedlich. Dies erlaubt die exakte Darstellung des Projekttyps durch das Objekt. Viele Eigenschaften und Methoden der Objekte werden bei Makroprojekten nicht unterstützt. Diese werden im Folgenden aufgeführt.

VSProject   Dieses Objekt stellt die makrospezifischen Details eines Projekts dar.

  • BuildManager Diese Eigenschaft wird nicht unterstützt. Bei Zugriff wird eine Ausnahme ausgelöst.

  • CopyProject Diese Methode wird nicht unterstützt. Bei Aufruf wird eine Ausnahme ausgelöst.

  • WorkOffline Diese Eigenschaft gibt immer False zurück. Beim Versuch, diese Eigenschaft festzulegen, wird zwar keine Ausnahme ausgelöst, sie kann jedoch nicht auf True festgelegt werden.

VSProjectItem   Dieses Objekt stellt die makrospezifischen Details eines Projektelements dar.

  • RunCustomTool Diese Methode wird nicht unterstützt. Bei Aufruf wird eine Ausnahme ausgelöst.

ProjectProperties3   Diese Eigenschaften beschreiben Visual Basic-, Visual C#-, Visual J#- und Makroprojekte. Die folgenden Eigenschaften werden nicht unterstützt:

ActiveFileSharePath

FullPath

ApplicationIcon

LinkRepair

AssemblyName

OfflineURL

AssemblyKeyContainerName

OutputFileName

AssemblyOriginatorKeyFile

OutputType

AssemblyOriginatorKeyMode

URL

DefaultClientScript

WebAccessMethod

DefaultHTMLPageLayout

WebServer

DefaultTargetSchema

WebServerVersion

ActiveFileSharePath

 

FileProperties2   Diese Eigenschaften beschreiben Visual Basic-, Visual C#-, Visual J#- und Makroprojektelemente. Die folgenden Dateieigenschaften werden nicht unterstützt. Bei Zugriff wird ein Fehler ausgelöst:

Author

FullPath

BuildAction

IsDependentFile

IsCustomToolOutput

IsDesignTimeBuildInput

CustomToolNamespace

IsLink

CustomToolOutput

HTMLTitle

DateCreated

LocalPath

DateModified

ModifiedBy

Extension

SubType

FileName

URL

Die folgenden FolderProperties2 werden nicht unterstützt. Bei Zugriff wird ein Fehler ausgelöst.

FullPath

URL

LocalPath

 

ProjectConfigurationProperties3   Diese Eigenschaften beschreiben Visual Basic-, Visual C#-, Visual J#- und Makrobereitstellungskonfigurationen. Die folgenden Dateieigenschaften werden nicht unterstützt. Bei Zugriff wird ein Fehler ausgelöst:

AllowUnsafeBlocks

IntermediatePath

BaseAddress

OutputPath

CheckForOverflowUnderflow

StartAction

DocumentationFile

StartArguments

EnableASPXDebugging

StartProgram

EnableUnmanagedDebugging

StartURL

IncrementalBuild

StartWithIE

Reference3   Dieses Objekt stellt einen Projektverweis dar. Die folgende Eigenschaft wird nicht unterstützt. Bei Zugriff wird eine Ausnahme ausgelöst:

References   Dieses Objekt stellt eine Auflistung sämtlicher Verweise im Makroprojekt dar. Die folgenden Methoden werden nicht unterstützt. Bei Aufruf wird ein Fehler ausgelöst:

AddActiveX

AddProject

Siehe auch

Konzepte

Einführung in die Projekterweiterbarkeit

Referenz

MacrosIDE

VSProject

Imports

VSProjectItem

BuildManager

VSProject2

Reference3