Freigeben über


Verfügbarmachen von Typen für visuelle Designer

Visual Studio muss zugriff auf Klassen- und Typdefinitionen zur Entwurfszeit haben, um einen visuellen Designer anzuzeigen. Klassen werden aus einem vordefinierten Satz von Assemblys geladen, die den vollständigen Abhängigkeitssatz des aktuellen Projekts enthalten (Verweise sowie deren Abhängigkeiten). Es kann auch erforderlich sein, dass visuelle Designer auf Klassen und Typen zugreifen können, die in Dateien definiert sind, die von benutzerdefinierten Tools generiert werden.

Die Visual Basic- und Visual C#-Projektsysteme unterstützen den Zugriff auf generierte Klassen und Typen über temporäre portable ausführbare Dateien (temporäre PEs). Jede datei, die von einem benutzerdefinierten Tool generiert wird, kann in eine temporäre Assembly kompiliert werden, sodass Typen von diesen Assemblys geladen und designern verfügbar gemacht werden können. Die Ausgabe jedes benutzerdefinierten Tools wird in einem separaten temporären PE kompiliert, und der Erfolg oder Fehler dieser temporären Kompilierung hängt nur davon ab, ob die generierte Datei kompiliert werden kann. Obwohl ein Projekt möglicherweise nicht als Ganzes erstellt wird, stehen die einzelnen temporären PEs für Designer weiterhin zur Verfügung.

Das Projektsystem bietet vollständige Unterstützung für das Nachverfolgen von Änderungen an der Ausgabedatei eines benutzerdefinierten Tools, vorausgesetzt, diese Änderungen sind das Ergebnis der Ausführung des benutzerdefinierten Tools. Jedes Mal, wenn das benutzerdefinierte Tool ausgeführt wird, wird ein neues temporäres PE generiert, und entsprechende Benachrichtigungen werden an Designer gesendet.

Hinweis

Da die ausführbare Datei der temporären Programmgenerierung im Hintergrund auftritt, werden dem Benutzer keine Fehler gemeldet, wenn die Kompilierung fehlschlägt.

Benutzerdefinierte Tools, die temporäre PE-Unterstützung nutzen, müssen die folgenden Regeln erfüllen:

  • "GeneratesDesignTimeSource " muss in der Registrierung auf 1 festgelegt werden.

    Ohne diese Einstellung wird keine programmgesteuerte Dateikompilierung ausgeführt.

  • Der generierte Code muss sich in derselben Sprache wie die globale Projekteinstellung befinden.

    Das temporäre PE wird unabhängig davon kompiliert, was das benutzerdefinierte Tool als angeforderte Erweiterung DefaultExtension meldet, sofern "GeneratesDesignTimeSource " in der Registrierung auf 1 festgelegt ist. Die Erweiterung muss nicht .vb, .cs oder .jsl sein. Die Erweiterung kann eine beliebige Erweiterung sein.

  • Der vom benutzerdefinierten Tool generierte Code muss gültig sein, und er muss eigenständig kompiliert werden, indem nur die gruppe von Verweisen verwendet wird, die zum Zeitpunkt Generate der Ausführung im Projekt vorhanden sind.

    Wenn ein temporäres PE kompiliert wird, ist die einzige Quelldatei, die dem Compiler bereitgestellt wird, die ausgabe des benutzerdefinierten Tools. Daher muss ein benutzerdefiniertes Tool, das ein temporäres PE verwendet, Ausgabedateien generieren, die unabhängig von anderen Dateien im Projekt kompiliert werden können.