Übersicht über die ASP.NET-Kompilierung
Aktualisiert: November 2007
Damit Anwendungscode für die Bearbeitung von Benutzeranforderungen verwendet werden kann, muss der Code erst von ASP.NET in eine oder mehrere Assemblys kompiliert werden. Assemblys sind Dateien mit der Dateinamenerweiterung .dll. Sie können ASP.NET-Code in vielen verschiedenen Sprachen schreiben, z. B. Visual Basic, C#, J# und andere. Wenn der Code kompiliert wurde, wird er in eine sprach- und prozessorunabhängige Darstellung übersetzt, die als Microsoft Intermediate Language (MSIL) bezeichnet wird. Zur Laufzeit wird MSIL im Kontext von .NET Framework ausgeführt, wobei MSIL in spezifische Anweisungen für den Prozessor des Computers übersetzt wird, auf dem die Anwendung ausgeführt wird.
Das Kompilieren von Anwendungscode hat viele Vorteile. Dazu gehören:
**Leistung **Kompilierter Code ist wesentlich schneller als Skriptsprachen wie ECMAScript oder VBScript. Die Darstellung orientiert sich näher am Maschinencode und erfordert keine zusätzliche Analyse.
**Sicherheit **Kompilierter Code lässt sich schwieriger zurückentwickeln als nicht kompilierter Quellcode, da er nicht über die Lesbarkeit und Abstraktion einer Hochsprache verfügt. Zusätzlich gibt es Verbergungstools, mit denen das Zurückentwickeln von kompiliertem Code weiter erschwert werden kann.
Stabilität Code wird zur Kompilierungszeit auf Syntaxfehler, Typsicherheit und andere Probleme überprüft. Durch Abfangen dieser Fehler zur Buildzeit können viele Fehler im Code ausgeschlossen werden.
Interoperabilität MSIL-Code unterstützt sämtliche .NET-Sprachen. Dadurch können Sie in Ihrem Code Assemblys verwenden, die ursprünglich in einer anderen Sprache geschrieben wurden. Wenn Sie zum Beispiel eine ASP.NET-Webseite in C# schreiben, können Sie einen Verweis auf eine DLL-Datei hinzufügen, die in Visual Basic geschrieben wurde.
Zu den Features der ASP.NET-Kompilierungsarchitektur gehören:
Unterstützung mehrerer Sprachen.
Automatische Kompilierung.
Flexible Bereitstellung.
Erweiterbares Buildsystem.
In den folgenden Abschnitten wird jedes dieser Features beschrieben.
Unterstützung mehrerer Sprachen
In ASP.NET 2.0 können Sie in einer Anwendung mehrere Sprachen verwenden, z. B. Visual Basic und C#, denn ASP.NET erstellt für jede Sprache eine eigene Assembly. Für Code, der im Ordner App_Code gespeichert ist, können Sie separate Unterordner für jede Sprache festlegen. Weitere Informationen über den Ordner App_Code finden Sie unter Ordner für freigegebenen Code in ASP.NET-Websites.
Automatische Kompilierung
ASP.NET kompiliert automatisch den Anwendungscode und alle abhängigen Ressourcen, wenn ein Benutzer eine Ressource zum ersten Mal von der Website anfordert. Grundsätzlich erstellt ASP.NET eine Assembly für jedes Anwendungsverzeichnis (z. B. App_Code) und eine Assembly für das Hauptverzeichnis. (Wenn Dateien in einem Verzeichnis in verschiedenen Programmiersprachen geschrieben wurden, werden für jede einzelne Sprache separate Assemblys erstellt.) Im Compilation-Abschnitt der Datei Web.config können Sie angeben, welche Verzeichnisse in einzelne Assemblys kompiliert werden.
Flexible Bereitstellung
Da ASP.NET die Website bei der ersten Anforderung durch einen Benutzer kompiliert, können Sie den Quellcode der Anwendung einfach auf den Produktionswebserver kopieren. Die Vorkompilierungsoptionen von ASP.NET geben Ihnen jedoch auch die Möglichkeit, die Website vor der Bereitstellung bzw. zwischen Bereitstellung und erster Benutzeranforderung zu kompilieren. Die Vorkompilierung bietet mehrere Vorteile. Die Leistung der Website bei der ersten Anforderung wird verbessert, weil keine zeitliche Verzögerung durch die Kompilierung durch ASP.NET entsteht. Bei der Vorkompilierung können außerdem Fehler gefunden werden, die sonst erst beim Aufrufen der Seite durch einen Benutzer entdeckt würden. Außerdem können Sie, wenn Sie die Website vor der Bereitstellung vorkompilieren, statt des Quellcodes die Assemblys bereitstellen.
Sie können eine Website mithilfe des ASP.NET-Compilertools (ASPNET_Compiler.exe) vorkompilieren. Das Tool bietet die folgenden Vorkompilierungsoptionen:
Direkte Kompilierung Bei dieser Option werden dieselben Kompilierungsschritte wie bei der dynamischen Kompilierung durchgeführt. Verwenden Sie diese Option, um eine Website zu kompilieren, die bereits auf einem Produktionsserver bereitgestellt worden ist.
Nicht-aktualisierbare vollständige Vorkompilierung Verwenden Sie diese Option, um eine Anwendung zu kompilieren und die kompilierte Ausgabe anschließend auf den Produktionsserver zu kopieren. Sämtlicher Anwendungscode, Markup und Code für die Benutzeroberfläche werden in Assemblys kompiliert. Platzhalterdateien wie ASPX-Seiten bleiben bestehen, sodass Sie weiterhin dateispezifische Aufgaben wie das Konfigurieren von Berechtigungen durchführen können. Allerdings enthalten die Dateien keinen aktualisierbaren Code. Um eine Seite oder Codeabschnitte zu aktualisieren, müssen Sie die Website erneut vorkompilieren und bereitstellen.
Aktualisierbare Vorkompilierung Der einzige Unterschied zur nicht aktualisierbaren vollständigen Vorkompilierung besteht darin, dass Benutzeroberflächenelemente wie ASPX-Seiten und ASCX-Steuerelemente ihr Markup, ihren Benutzeroberflächencode und ihren Inlinecode beibehalten (sofern vorhanden). Sie können Code in der Datei aktualisieren, nachdem sie bereitgestellt wurde; ASP.NET erkennt Änderungen an der Datei und führt eine Neukompilierung durch. Beachten Sie, dass Code in einer Code-Behind-Datei (VB- oder CS-Datei) während der Vorkompilierung in Assemblys integriert wird. Daher müssen bei Änderungen an diesem Code die Schritte der Vorkompilierung und Bereitstellung erneut durchgeführt werden.
Weitere Informationen hierzu finden Sie unter Übersicht über die ASP.NET-Vorkompilierung.
Erweiterbares Buildsystem
ASPX-Seiten, ASCX-Dateien und globale Ressourcen werden in ASP.NET mithilfe von BuildProvider-Klassen erstellt. Sie können das ASP.NET-Buildsystem so erweitern und anpassen, dass benutzerdefinierte Ressourcen kompiliert werden können. Erstellen Sie hierzu Klassen, die von der BuildProvider-Klasse erben. Sie können beispielsweise einen neuen Dateityp hinzufügen und anschließend einen BuildProvider schreiben, der diesen Dateityp erstellt.