Einführung in die Projekterweiterbarkeit

Aktualisiert: November 2007

Das Objektmodell wird durch einfaches Hinzufügen von Verweisen auf die VSLangProj-Assemblys zum Projekt verfügbar: Assemblys VSLangProj.dll, VSLangProj2.dll, VSLangProj80.dll und VSLangProj90.dll. Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen oder Entfernen von Verweisen in Visual Studio (Visual Basic). Das bedeutet, dass das Objektmodell für Makros, Add-Ins und jede Art von Projekt verfügbar ist, wo ein Erweitern oder Automatisieren der IDE erforderlich ist. Makros werden mithilfe von Visual Basic in der Makro-IDE geschrieben. Die Beispiele in den Themen sind in der Visual Basic-Sprache und der Visual C#-Sprache geschrieben. Informationen zum Ausführen der Beispiele finden Sie unter Gewusst wie: Kompilieren und Ausführen der Codebeispiele für das Automatisierungsobjektmodell. Add-Ins können in beliebigen in Visual Studio verfügbaren Sprachen geschrieben werden, z. B. Visual Basic, Visual C#, Visual C++ und Visual J#. Die Referenzthemen für die Member VSLangProj, VSLangProj2, VSLangProj80 und VslangProj90 enthalten die Syntax für jede dieser Sprachen. Eine Beschreibung der Automatisierungsprojekttypen und Funktionalitäten der Automatisierung finden Sie unter Erstellen von Add-Ins und Assistenten.

VSLangProj-Namespace, VSLangProj2-Namespace, VSLangProj80-Namespace und VSLangProj90-Namespace

Diese Namespaces enthalten alle Klassen, Schnittstellen und Enumerationen für Visual Basic-, Visual C#- und Visual J#-Projekte. Eine vollständige Liste der Objekte im Namespace finden Sie unter Visual Basic- und Visual C#-Erweiterbarkeitsobjektmodell für Projekte.

Möglicher Fehler bei Verwendung von VSLangProj-Assemblys mit der EnvDTE-Assembly

Wenn Sie ein Projekt erstellen, das auf eine oder mehrere VSLangProj-Assemblys und die EnvDTE-Assembly verweist, wird zur Laufzeit u. U. der folgende Fehler angezeigt:

"Unbehandelte Ausnahme: System.IO.FileNotFoundException: Fehler beim Laden der Datei 'EnvDTE, Version=7.0.3300.0"

Dieser Fehler ist auf einen Typauflösungskonflikt zur Laufzeit zurückzuführen. Das bedeutet, dass es sich bei der Version von EnvDTE, die im Lieferumfang von Visual Studio 2005 enthalten ist, um Version 8.0.xx handelt, der Konfigurationsverweis des Projekts jedoch nach einer früheren Version der Assembly, nämlich Version 7.0.xx, sucht. Um dieses Problem zu beheben, müssen Sie der Konfigurationsdatei des Projekts (CONFIG-Datei) eine Bindungsumleitung für die neuere Version von EnvDTE hinzufügen. Dadurch lädt Visual Studio die neuere Version von EnvDTE, sodass der Fehler nicht mehr auftritt.

Fügen Sie dazu dem Projekt eine "Anwendungskonfigurationsdatei" hinzu, und ersetzen Sie deren Inhalt durch den folgenden Code:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-
        com:asm.v1" appliesTo="v2.0.50318">
            <dependentAssembly>
                <assemblyIdentity name="EnvDTE" publicKeyToken=
                "b03f5f7f11d50a3a"/>
                <bindingRedirect oldVersion="7.0.3300.0" 
                newVersion="8.0.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

VSProject2-Objekt

Dieses Objekt bietet Zugriff auf andere Objekte im Erweiterbarkeitsmodell. Das DTE-Objekt ist das Objekt der obersten Ebene im Automatisierungsmodell von Visual Studio. Im allgemeinen Erweiterbarkeitsmodell wird ein Projekt durch das generische Project-Objekt dargestellt. Das Project-Objekt verfügt über eine Object-Eigenschaft. Der Typ dieser Eigenschaft wird zur Laufzeit durch die Sprache des Projekts bestimmt. In einem Visual Basic-, Visual C#- oder Visual J#-Projekt gibt die Object-Eigenschaft ein Objekt vom Typ VSProject2 zurück. Da der Typ der Object-Eigenschaft Object lautet, müssen Sie den Verweis in den Typ VSProject2 umwandeln. In einem Makro würde die Umwandlung wie folgt aussehen, wenn das erste Projekt ein Visual Basic-Projekt ist:

Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Dim proj As EnvDTE.Project
Dim vsproject As VSLangProj80.VSProject2
proj = DTE.Solution.Projects.Item(1)
vsproject = CType(proj.Object, VSLangProj80.VSProject2)
using EnvDTE;
using EnvDTE80;
using EnvDTE90;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
EnvDTE.Project proj;
VSLangProj80.VSproject2 vsproject;
proj = DTE2.Solution.Projects.Item(1);
vsproject = (VSLangProj80.VSProject2)proj;

Nachdem Sie auf das VSProject2-Element verwiesen haben, können Sie die Eigenschaften, Konfigurationen, Dateien, Ordner, Importanweisungen und Verweise des Projekts bearbeiten.

Weitere Informationen finden Sie unter Einführung in das VSProject2-Objekt.

Verweise und Reference-Objekte

Die References-Eigenschaft, die im VSProject2-Objekt enthalten ist, weist eine Auflistung von Reference3-Objekten auf. Das Reference3-Objekt stellt einen Projektverweis dar und ist in erster Linie ein schreibgeschütztes Objekt, das eine Remove-Methode unterstützt. Das References-Objekt bietet Unterstützung für das Hinzufügen von Verweisen (COM, .NET-Assemblys, ActiveX sowie anderen Projekten) und das Auslösen von Ereignissen (Hinzufügen, Entfernen und Ändern von Verweisen).

Das References-Objekt enthält keine Webverweise eines Projekts. Greifen Sie zum Abrufen der Webverweise eines Projekts auf die ProjectItems-Eigenschaft der WebReferencesFolder-Eigenschaft zu.

Weitere Informationen und Codebeispiele finden Sie unter dem Reference-Objekt und dem Reference3-Objekt, der References-Auflistung, der References-Eigenschaft und der WebReferencesFolder-Eigenschaft.

Imports-Objekt

Die Imports-Eigenschaft, die im VSProject2-Objekt enthalten ist, verwaltet eine Auflistung von Imports-Anweisungen, die für ein ganzes Visual Basic-Projekt gelten. Wenn dieser Auflistung eine Importanweisung hinzugefügt wird, muss die zugehörige Imports-Anweisung (beispielsweise Imports VSLangProj) nicht der Codedatei hinzugefügt werden. Dieses Objekt unterstützt das Hinzufügen und Entfernen von Importanweisungen sowie das Auslösen von Ereignissen als Reaktion auf das Hinzufügen und Entfernen von Anweisungen. In einem Visual C#-Projekt ist keine Entsprechung vorhanden, und die VSProject2.Imports-Eigenschaft gibt bei Anwendung auf ein Visual C#-Projekt Nothing oder null zurück. Weitere Informationen finden Sie unter Imports.

Das VSProjectItem- und das BuildManager-Objekt

Das VSProjectItem-Objekt ist die Projektelemententsprechung des VSProject2-Objekts. Im allgemeinen Erweiterbarkeitsmodell stellt das generische ProjectItem-Objekt ein Projektelement dar. Die Object-Eigenschaft weist den Typ Object auf, und in einem Visual Basic- oder Visual C#-Projekt lautet der Typ dieser Eigenschaft VSProjectItem. Die Umwandlung des Objekts in den Typ VSProjectItem würde in einem Makro wie folgt aussehen:

Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Dim pi As VSProjectItem
pi = CType(DTE2.Solution.Projects.Item(1).ProjectItems.Item(1)._
    Object, VSProjectItem)
using EnvDTE;
using EnvDTE80;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
using VSLangProj90;
EnvDTE.Project proj;
VSLangProj.VSProjectItem pi;
Pi = (VSProject2)DTE2.Solution.Projects.Item(1).ProjectItems.Item(1).
Object;

Das VSProjectItem-Objekt enthält Eigenschaften mit Verknüpfungen zum übergeordneten Projektelement und Projekt sowie eine Methode zum erzwungenen Ausführen eines benutzerdefinierten Tools an diesem Element. Das BuildManager-Objekt verarbeitet die Ausgabe des benutzerdefinierten Tools. Weitere Informationen finden Sie in der RunCustomTool-Methode, unter Einführung in das BuildManager-Objekt, im VSProjectItem-Objekt und im BuildManager-Objekt.

Properties-Eigenschaft

Das allgemeine Erweiterbarkeitsmodell weist eine Properties-Eigenschaft in drei Objekten auf:

  • Project-Objekt   Die Eigenschaften in diesem Objekt entsprechen den auf der Registerkarte Allgemeine Eigenschaften des Projektdialogfelds Eigenschaftenseiten in der IDE aufgeführten Eigenschaften.

  • Configuration-Objekt   Die Eigenschaften in diesem Objekt entsprechen den auf der Registerkarte Konfigurationseigenschaften des Projektdialogfelds Eigenschaftenseiten in der IDE aufgeführten Eigenschaften.

  • ProjectItem-Objekt   Die Eigenschaften in diesem Objekt entsprechen den Eigenschaften, die im Eigenschaftenfenster zu finden sind, wenn ein Projektelement im Projektmappen-Explorer ausgewählt wird.

  • In jedem Fall ist die Properties-Eigenschaft eine Auflistung von Objekten des Typs Property. Ein Property-Objekt kann von der Auflistung entweder durch Angeben des mit Eins beginnenden Index der Eigenschaft oder ihres Namens abgerufen werden. Der Inhalt der Auflistung ist sprachspezifisch. Im Falle von Projektelementen hängt der Inhalt auch davon ab, ob das Element eine Datei oder ein Ordner ist.

Siehe auch

Konzepte

Das Automatisierungsspektrum von Visual Studio

Weitere Ressourcen

Erstellen von Add-Ins und Assistenten