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:
Zugreifen auf die Erweiterbarkeitsobjekte eines Makroprojekts
Makroprojekte und das VSProject-Objekt und das VSProject2-Objekt
Makrospezifische Elemente des VSLangProj-Objekts, des VSLangProj2-Objekts und des VSLangProj80-Objekts
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:
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:
|
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:
Die folgenden FolderProperties2 werden nicht unterstützt. Bei Zugriff wird ein Fehler ausgelöst.
|
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:
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:
Siehe auch
Konzepte
Einführung in die Projekterweiterbarkeit