Einführung in das BuildManager-Objekt

Das BuildManager-Objekt wird von Drittanbieterentwicklern verwendet, um die PE-Dateien (Portable Executables – übertragbare ausführbare Dateien) zu verwalten. PE-Dateien werden mit benutzerdefinierten Tools kompiliert, die das System anweisen, dass die zugehörige Ausgabe in eine temporäre PE-Datei kompiliert wird.

Das BuildManager-Objekt und die benutzerdefinierten Tools werden zur Entwicklung visueller Designer verwendet. Ein Designer in Visual Studio stellt eine grafische Benutzeroberfläche für eine Datei zur Verfügung. Damit die Benutzeroberfläche erstellt werden kann, muss der Designer die in den Projektelementdateien beschriebenen Typen möglicherweise instanziieren. Temporäre PE-Dateien aus benutzerdefinierten Tools sind Assemblydateien, die in Projektelementen beschriebene Typen kapseln, welche Ausgaben eines benutzerdefinierten Tools sind. Daher wirken Designer und benutzerdefinierte Tools oft zusammen, um die Entwurfszeit-Benutzeroberfläche zu erzeugen. Ein gutes Beispiel hierfür ist das benutzerdefinierte Tool, das Klassen aus einer XSD-Datei generiert. Visuelle Designer müssen jeweils die generierten Klassen instanziieren können, um zu ermitteln, was über ein Dataset angeboten wird. Nur so kann die Benutzeroberfläche zum Aktivieren der Unterstützung zur Entwurfszeit für Features wie Datenbindung bereitgestellt werden.

Benutzerdefinierte Tools

Ein benutzerdefiniertes Tool nimmt den Inhalt einer Projektelementdatei als Eingabe und erzeugt eine neue Projektelementdatei, die später auch kompiliert werden kann. Eine typische Reihenfolge von Ereignissen lautet wie folgt:

  1. Der Benutzer oder Designer legt die CustomTool-Eigenschaft eines Projektelements fest.

  2. Das benutzerdefinierte Tool wird mit dem Projektelementinhalt als Eingabe ausgeführt. Wenn das benutzerdefinierte Tool die Eingabe nicht erkennt, werden dem Benutzer die durch das benutzerdefinierte Tool festgestellten Fehler gemeldet. Weitere Informationen finden Sie unter RunCustomTool.

  3. Zusammen mit den Projektreferenzen wird die Ausgabe des benutzerdefinierten Tools in eine übertragbare ausführbare Datei (temporäre PE-Datei) kompiliert.

    Tipp

    Die Ausgabe wird nur in eine temporäre PE-Datei kompiliert, wenn das benutzerdefinierte Tool registriert und der Registrierungswert GeneratesDesignTimeOutput auf 1 festgelegt wird.

  4. Eine Beschreibung der PE-Datei können Sie anzeigen, wenn Sie die BuildDesignTimeOutput-Methode des BuildManager-Objekts aufrufen.

    Die von BuildDesignTimeOutput zurückgegebene temporäre PE-Ausgabe sieht folgendermaßen aus:

    <root>
        <Application private_binpath="full output path to temporary PE,
    excluding the name"/>
        <Assembly
            codebase = "filename of the temporary PE, e.g., sample.dll""
            name = "name of the temporary PE == filename without the 
    extension, e.g., "sample""
            version = "always "0.0.0.0""
            snapshot_id = "unique ID number" 
            replaceable = "currently unused; always set to "True""
        />
    </root>
    

Das BuildManager-Objekt

Das BuildManager-Objekt bietet Zugriff auf die temporären PE-Dateien. Die DesignTimeOutputMonikers-Eigenschaft ist ein Array aller PE-Moniker (Namen) im Projekt. Das Projektsystem weist PE-Moniker basierend auf der Projekthierarchie zu. Wenn beispielsweise die XML-Designer-Datei SomeData.xsd in Folder1 von Project1 die Datei SomeData.cs ausgibt, lautet der Moniker Project1\Folder1\SomeData.cs. Die BuildDesignTimeOutput-Methode nimmt einen Moniker als Parameter und gibt eine Beschreibung der PE-Datei in einer XML-Zeichenfolge zurück.

Das DesignTimeOutputDeleted-Ereignis des BuildManagerEventsClass-Objekts wird ausgelöst, wenn eine Projektelementdatei, die eine PE-Datei generiert, aus dem Projekt gelöscht wird. Das DesignTimeOutputDirty-Ereignis wird immer dann ausgelöst, wenn ein benutzerdefiniertes Tool (Einzeldatei-Generator) zur Generierung einer temporären PE-Datei ausgeführt wird. Alle Einzeldatei-Generatoren in einem Projekt werden in den folgenden Situationen ausgeführt:

  • Ein Projekt wird sofort nach einem Upgrade geöffnet.

  • Der Stammnamespace hat sich geändert.

Individuelle Einzeldatei-Generatoren werden in den folgenden Situationen ausgeführt:

  • Das Dokument mit einem Einzeldatei-Generator wird gespeichert (z. B. ein Dataset).

  • Das Dokument mit einem Einzeldatei-Generator ist geöffnet und wurde geändert, und der Benutzer wechselt zu einem anderen Dokument in Visual Studio.

  • Eine Datei im Projekt mit einem Einzeldatei-Generator wird umbenannt oder verschoben.

  • Der Benutzer hat symbolisch einen Typ umbenannt, der in der Ausgabedatei eines Einzeldatei-Generators verwendet wird. Wenn der Benutzer z. B. die symbolische Umbenennung für Typ "Type" aufruft und diese Typ-ID in "dataset1.vb" (der Ausgabe eines Datasets) verwendet wird, wird der Einzeldatei-Generator nach Beendigung der Umbenennung aufgerufen.

Klicken Sie auf den Link in der folgenden Tabelle, um ein Beispiel zum Programmieren mit dem BuildManager-Objekt aufzurufen.

Zweck

Siehe

Anzeigen der Moniker für die temporären PE-Dateien und Überwachen von BuildManagerEvents.

Gewusst wie: Verwenden des BuildManager-Objekts und des BuildManagerEvents-Objekts

Drittanbieter

Auf einen Großteil der Funktionalität des BuildManager-Objekts kann auch über die ITypeResolutionService-Schnittstelle zugegriffen werden. Drittanbieter, die einen umfassenden Designer benötigen, müssen jedoch die DesignTimeOutputMonikers-Eigenschaft und die BuildDesignTimeOutput-Methode verwenden. Weitere Informationen finden Sie unter Automatisierungsspektrum von Visual Studio.