ASP.NET-Kompilierungstool (Aspnet_compiler.exe)
Mit dem ASP.NET-Kompilierungstool (Aspnet_compiler.exe) können Sie eine ASP.NET-Webanwendung kompilieren, entweder direkt oder für die Bereitstellung an einem Zielort wie auf einem Produktionsserver. Mit der direkten Kompilierung wird die Anwendungsleistung unterstützt, da Endbenutzer bei der ersten Anwendungsanforderung während der Kompilierung der Anwendung nicht auf Verzögerungen stoßen.
Die Kompilierung für die Bereitstellung kann auf zwei Wegen durchgeführt werden. Entweder werden alle Quelldateien wie Code-Behind-Dateien und Markupdateien entfernt, oder die Markupdateien werden beibehalten.
Hinweis
Das ASP.NET-Kompilierungstool ist erst ab ASP.NET, Version 2.0, verfügbar.
aspnet_compiler [-?]
[-m metabasePath | -v virtualPath [-p physicalPath]]
[[-u] [-f] [-d] [-fixednames] targetDir]
[-c]
[-errorstack]
[-nologo]
[[-keyfile file | -keycontainer container ] [-aptca] [-delaysign]]
Optionen
Option | Beschreibung |
---|---|
-m metabasePath |
Gibt den vollständigen zu kompilierenden IIS-Metabasispfad der Anwendung an. Die IIS-Metabasis ist ein hierarchischer Informationsspeicher zur Konfigurierung von IIS. Beispielsweise ist der Metabasispfad zur Standard-IIS-Website LM/W3SVC/1/ROOT. Diese Option kann nicht mit der -v-Option oder der -p-Option kombiniert werden. |
-v virtualPath |
Gibt den virtuellen Pfad der zu kompilierenden Anwendung an. Wenn -p ebenfalls angegeben wird, wird der Wert des zugehörigen physicalPath-Parameters dazu verwendet, die zu kompilierende Anwendung zu suchen. Sonst wird die IIS-Metabasis verwendet, und das Tool geht davon aus, dass die Quelldateien unter der Standard-Website, die im Metabasisknoten LM/W3SVC/1/ROOT angegeben ist, gespeichert sind. Diese Option kann nicht mit der -m-Option kombiniert werden. |
-p physicalPath |
Gibt den vollständigen Netzwerkpfad oder den lokalen Datenträgerpfad des Stammverzeichnisses an, das die zu kompilierende Anwendung enthält. Wenn -p nicht angegeben wird, wird für die Suche nach dem Verzeichnis die IIS-Metabasis verwendet. Diese Option muss mit der -v-Option kombiniert werden. Sie kann jedoch nicht mit der -m-Option kombiniert werden. |
-u |
Gibt an, dass Aspnet_compiler.exe eine vorkompilierte Anwendung erstellen soll, die nachfolgende Aktualisierungen von Inhalten wie ASPX-Seiten ermöglicht. Wenn diese Option fehlt, enthält die entstehende Anwendung nur kompilierte Dateien und kann auf dem Bereitstellungsserver nicht aktualisiert werden. Sie können die Anwendung nur aktualisieren, indem Sie die Quellmarkupdateien ändern und erneut kompilieren. Der targetDir-Parameter muss enthalten sein. |
-f |
Gibt an, dass das Tool vorhandene Dateien im Verzeichnis targetDir und in seinen Unterverzeichnissen überschreiben soll. |
-d |
Überschreibt die in den Quellkonfigurationsdateien der Anwendung festgelegten Einstellungen, um das Einfügen von Debuginformationen in die kompilierte Anwendung zu erzwingen. Andernfalls erfolgt keine Debugausgabe. Sie können die -d-Option nicht für die direkte Kompilierung verwenden. Bei der direkten Kompilierung werden Konfigurationseinstellungen für Debugoptionen berücksichtigt. |
targetDir |
Der Netzwerkpfad oder der lokale Datenträgerpfad zum Stammverzeichnis, der die kompilierte Anwendung enthält. Wenn der targetDir-Parameter nicht enthalten ist, wird die Anwendung direkt kompiliert. |
-c |
Gibt an, dass die zu kompilierende Anwendung vollständig neu erstellt werden soll. Komponenten, die bereits kompiliert wurden, werden erneut kompiliert. Wenn diese Option fehlt, erstellt das Tool nur die Teile der Anwendung, die seit der letzten Kompilierung geändert wurden. |
-errorstack |
Gibt an, dass das Tool bei fehlgeschlagener Kompilierung der Anwendung Stapelüberwachungsinformationen berücksichtigen soll. |
-keyfile file |
Gibt an, dass AssemblyKeyFileAttribute auf die kompilierte Assembly angewendet werden soll. Das Attribut gibt den Namen der Datei an, die das öffentliche/private Schlüsselpaar für die Generierung eines starken Namens enthält. Diese Option muss mit der -aptca-Option kombiniert werden. Wenn das Attribut bereits in Codedateien auf die Assembly angewendet wird, löst Aspnet_compiler.exe eine Ausnahme aus. |
-keycontainer container |
Gibt an, dass AssemblyKeyNameAttribute auf die kompilierte Assembly angewendet werden soll. Das Attribut gibt den Namen des Containers für das öffentliche/private Schlüsselpaar zur Generierung eines starken Namens an. Diese Option muss mit der -aptca-Option kombiniert werden. Wenn das Attribut bereits in Codedateien auf die Assembly angewendet wird, löst Aspnet_compiler.exe eine Ausnahme aus. |
-aptca |
Gibt an, dass das AllowPartiallyTrustedCallersAttribute, das nicht voll vertrauenswürdigen Aufrufern Zugriff auf eine Assembly gewährt, auf die von Aspnet_compiler.exe generierte Assembly mit starkem Namen angewendet werden soll. Diese Option muss mit der -keyfile-Option oder der -keycontainer-Option kombiniert werden. Wenn das Attribut bereits in Codedateien auf die Assembly angewendet wird, löst Aspnet_compiler.exe eine Ausnahme aus. |
-delaysign |
Legt fest, dass AssemblyDelaySignAttribute auf die generierte Assembly angewendet werden soll. Das Attribut gibt an, dass eine Assembly statt mit dem öffentlichen/privaten Schlüsselpaar nur mit dem öffentlichen Schlüsseltoken signiert werden soll. Diese Option muss mit der -keyfile-Option oder der -keycontainer-Option kombiniert werden. Wenn das Attribut bereits in Codedateien auf die Assembly angewendet wird, löst Aspnet_compiler.exe eine Ausnahme aus. Wenn Sie die -delaysign-Option verwenden, kann der von Aspnet_compilier.exe erzeugte Code ausgeführt werden, bevor der Code signiert ist. Sie müssen sicherstellen, dass der Code nicht von böswilligen Benutzern missbraucht werden kann, bevor die Signierung abgeschlossen ist. |
-fixednames |
Gibt an, dass für jede Seite in der Anwendung eine Assembly generiert werden soll. Jede Assembly wird mit dem virtuellen Pfad der Originalseite benannt, sofern der Name nicht die Beschränkung des Betriebssystems für Dateinamen überschreitet. In diesem Fall wird ein Hash generiert und für den Assemblynamen verwendet. Sie können die -fixednames-Option nicht für die direkte Kompilierung verwenden. Bei der direkten Kompilierung werden Konfigurationseinstellungen für den Batchkompilierungsmodus berücksichtigt. |
-nologo |
Unterdrückt die Copyrightmeldung. |
-? |
Zeigt die Befehlssyntax und die Optionen für das Tool an. |
Hinweise
Bei der Verwendung des ASP.NET-Kompilierungstools gibt es allgemein zwei Möglichkeiten: die direkte Kompilierung und die Kompilierung für die Bereitstellung, bei der ein Zielausgabeverzeichnis angegeben wird. In den folgenden Abschnitten werden diese Szenarien beschrieben.
Direktes Kompilieren einer Anwendung
Das ASP.NET-Kompilierungstool kann eine Anwendung direkt kompilieren, d. h., es ahmt das Erstellen mehrerer Anforderungen an die Anwendung nach, was zu einer ständigen Kompilierung führt. Bei Benutzern einer vorkompilierten Site tritt keine Verzögerung auf, die bei der ersten Anforderung durch die Seitenkompilierung verursacht wird.
Beachten Sie, dass beim Verwenden eines imitierten Kontos sowohl das Konto als auch das Anmeldebenutzerkonto Schreibzugriff auf das Ziel haben müssen, damit die Vorkompilierung erfolgreich durchgeführt werden kann.
Wenn Sie eine Site direkt vorkompilieren, gilt Folgendes:
Die Site behält ihre Dateien und ihre Verzeichnisstruktur.
Auf dem Server müssen sich Compiler für alle von der Site verwendeten Programmiersprachen befinden.
Wenn die Kompilierung einer Datei fehlschlägt, schlägt die Kompilierung der gesamten Site fehl.
Sie können nach dem Hinzufügen neuer Quelldateien eine Anwendung erneut direkt kompilieren. Sofern Sie nicht die -c-Option einschließen, kompiliert das Tool nur die neuen oder geänderten Dateien.
Hinweis
Bei der Kompilierung einer Anwendung, die eine geschachtelte Anwendung enthält, wird die geschachtelte Anwendung nicht kompiliert. Die geschachtelte Anwendung muss separat kompiliert werden.
Kompilieren einer Anwendung für die Bereitstellung
Sie kompilieren eine Anwendung für die Bereitstellung (Kompilierung zu einem Zielort), indem Sie den targetDir-Parameter angeben. Der endgültige Speicherort für die Webanwendung kann targetDir sein. Die kompilierte Anwendung kann jedoch auch weiter bereitgestellt werden.
Mithilfe der -u-Option wird die Anwendung so kompiliert, dass Sie an bestimmten Dateien in der Anwendung Änderungen vornehmen können, ohne die Anwendung neu zu kompilieren. Aspnet_compiler.exe unterscheidet statische und dynamische Dateitypen und behandelt diese beim Erstellen der entstehenden Anwendung unterschiedlich.
Statische Dateitypen besitzen keinen zugehörigen Compiler oder Buildanbieter, wie z. B. Dateien mit den Dateinamenerweiterungen .css, .gif, .htm, .html, .jpg, .js und so weiter. Diese Dateien werden einfach in den Zielort kopiert, und ihre jeweilige Positionen in der Verzeichnisstruktur werden beibehalten.
Dynamische Dateitypen haben einen zugehörigen Compiler oder Buildanbieter. Zu ihnen gehören Dateien mit ASP.NET-spezifischen Dateinamenerweiterungen wie .asax, .ascx, .ashx, .aspx, .browser, .master und so weiter. Das ASP.NET-Kompilierungstool generiert aus diesen Dateien Assemblys. Wenn die -u-Option fehlt, erstellt das Tool auch Dateien mit der Dateinamenerweiterung .COMPILED, die ihrer Assembly die ursprünglichen Quelldateien zuordnen. Um die Erhaltung der Verzeichnisstruktur der Anwendungsquelle sicherzustellen, generiert das Tool in den entsprechenden Speicherorten in der Zielanwendung Platzhalterdateien.
Wenn Sie angeben möchten, dass der Inhalt der kompilierten Anwendung geändert werden kann, müssen Sie die -u-Option verwenden. Andernfalls werden nachfolgende Änderungen ignoriert oder verursachen Laufzeitfehler.
In der folgenden Tabelle wird beschrieben, wie das ASP.NET-Kompilierungstool verschiedene Dateitypen behandelt, wenn die -u-Option berücksichtigt wird.
Dateityp | Compileraktion |
---|---|
.ascx, .aspx, .master |
Diese Dateien werden in Markup und Quellcode aufgeteilt, der Code-Behind-Dateien einschließt. Der Quellcode wird in Assemblys kompiliert, deren Namen von einem Hashalgorithmus abgeleitet sind. Die Assemblys werden im Verzeichnis Bin abgelegt. Sämtlicher Inlinecode, d. h. Code zwischen |
.ashx, .asmx |
Diese Dateien werden nicht kompiliert und unverändert und unkompiliert in die Ausgabeverzeichnisse verschoben. Wenn Sie den Handlercode kompilieren möchten, legen Sie den Code in Quellcodedateien im Verzeichnis App_Code ab. |
.cs, .vb, .jsl, .cpp (ohne Code-Behind-Dateien für die zuvor aufgelisteten Dateitypen) |
Diese Dateien werden kompiliert und als Ressource in Assemblys, die auf sie verweisen, eingefügt. Quelldateien werden nicht in das Ausgabeverzeichnis kopiert. Wenn auf eine Codedatei nicht verwiesen wird, wird sie nicht kompiliert. |
Benutzerdefinierte Dateitypen |
Diese Dateien werden nicht kompiliert. Diese Dateien werden in die entsprechenden Ausgabeverzeichnisse kopiert. |
Quellcodedateien im App_Code-Unterverzeichnis |
Diese Dateien werden in Assemblys kompiliert und im Verzeichnis Bin abgelegt. Hinweis Statische Dateitypen im Verzeichnis App_Code werden nicht in die Ausgabeverzeichnisse kopiert. |
RESX-Dateien und RESOURCE-Dateien im App_GlobalResources-Unterverzeichnis |
Diese Dateien werden in Assemblys kompiliert und im Verzeichnis Bin abgelegt. Im Hauptausgabeverzeichnis wird kein App_GlobalResources-Unterverzeichnis erstellt, und in die Ausgabeverzeichnisse werden keine im Quellverzeichnis gespeicherten RESX- oder RESOURCE-Dateien kopiert. Hinweis Die Ressourcendateien im App_GlobalResources-Unterverzeichnis werden in Assemblys kompiliert, bevor Code im App_Code-Unterverzeichnis kompiliert wird. Die Änderung von Ressourcendateien nach der Kompilierung wird nicht unterstützt. |
RESX-Dateien und RESOURCE-Dateien im App_LocalResources-Unterverzeichnis |
Diese Dateien werden nicht kompiliert und in die entsprechenden Ausgabeverzeichnisse kopiert. |
SKIN-Dateien im App_Themes-Unterverzeichnis |
Die SKIN-Dateien und statische Designdateien werden nicht kompiliert und in die entsprechenden Ausgabeverzeichnisse kopiert. |
.browser Web.config Statische Dateitypen Bereits im Verzeichnis Bin vorhandene Assemblys |
Diese Dateien werden unverändert in die Ausgabeverzeichnisse kopiert. |
In der folgenden Tabelle wird beschrieben, wie das ASP.NET-Kompilierungstool verschiedene Dateitypen behandelt, wenn die -u-Option fehlt.
Hinweis
Sie werden nicht durch Warnungen daran gehindert, den Quellcode einer kompilierten Anwendung zu ändern.
Dateityp | Compileraktion |
---|---|
.aspx, .asmx, .ashx, .master |
Diese Dateien werden in Markup und Quellcode geteilt, was sowohl Code-Behind-Dateien und sämtlichen in |
.ascx |
Diese Dateien werden in Markup und Quellcode geteilt. Quellcode wird in Assemblys kompiliert, deren Namen von einem Hashalgorithmus abgeleitet werden, und im Verzeichnis Bin abgelegt. Es werden keine Markupdateien generiert. |
.cs, .vb, .jsl, .cpp (ohne Code-Behind-Dateien für die zuvor aufgelisteten Dateitypen) |
Quellcode, auf den von Assemblys verwiesen wird, die aus Dateien vom Typ .ascx, .ashx oder .aspx generiert wurden, wird in Assemblys kompiliert und im Verzeichnis Bin abgelegt. Es werden keine Quelldateien kopiert. |
Benutzerdefinierte Dateitypen |
Diese Dateien werden wie dynamische Dateien kompiliert. Je nachdem, auf welchem Dateityp sie basieren, kann der Compiler Zuordnungsdateien in den Ausgabeverzeichnissen ablegen. |
Dateien im App_Code-Unterverzeichnis |
Quellcodedateien in diesem Unterverzeichnis werden in Assemblys kompiliert und im Verzeichnis Bin abgelegt. Hinweis Statische Dateitypen im Verzeichnis App_Code werden nicht in die Ausgabeverzeichnisse kopiert. |
Dateien im App_GlobalResources-Unterverzeichnis |
Diese Dateien werden in Assemblys kompiliert und im Verzeichnis Bin abgelegt. Im Hauptausgabeverzeichnis wird kein App_GlobalResources-Unterverzeichnis erstellt. Wenn die Konfigurationsdatei |
RESX-Dateien und RESOURCE-Dateien im App_LocalResources-Unterverzeichnis |
Diese Dateien werden in Assemblys mit eindeutigen Namen kompiliert und im Verzeichnis Bin abgelegt. In die Ausgabeverzeichnisse werden keine RESX-Dateien oder RESOURCE-Dateien kopiert. |
SKIN-Dateien im App_Themes-Unterverzeichnis |
Designs werden in Assemblys kompiliert und im Verzeichnis Bin abgelegt. Stub-Dateien werden für SKIN-Dateien erstellt und im entsprechenden Ausgabeverzeichnis abgelegt. Statische Dateien (z. B. .css) werden in die Ausgabeverzeichnisse kopiert. |
.browser Web.config Statische Dateitypen Bereits im Verzeichnis Bin vorhandene Assemblys |
Diese Dateien werden unverändert in das Ausgabeverzeichnis kopiert. |
Feste Assemblynamen
Für einige Szenarien, z. B. die Bereitstellung einer Webanwendung über MSI Windows Installer, ist es notwendig, konsistente Dateinamen und Inhalte sowie konsistente Verzeichnisstrukturen zu verwenden, um für Aktualisierungen Assemblys und Konfigurationseinstellungen zu identifizieren. In solchen Fällen können Sie mit der -fixednames-Option angeben, dass das ASP.NET-Kompilierungstool, statt mehrere Seiten in Assemblys zu kompilieren, für jede Quelldatei eine Assembly kompilieren soll. Das kann jedoch zu einer großen Zahl an Assemblys führen. Daher sollten Sie diese Option im Interesse der Skalierbarkeit mit Vorsicht verwenden.
Kompilierung mit starkem Namen
Es stehen die Optionen -aptca, -delaysign, -keycontainer und -keyfile zur Verfügung, damit Sie mithilfe von Aspnet_compiler.exe Assemblys mit starkem Namen erstellen können, ohne separat Strong Name-Tool (Sn.exe) zu verwenden. Diese Optionen entsprechen jeweils AllowPartiallyTrustedCallersAttribute, AssemblyDelaySignAttribute, AssemblyKeyNameAttribute und AssemblyKeyFileAttribute. Da jede Option das entsprechende Attribut auf die kompilierte Assembly anwendet und weil die Attribute mit AttributeUsageAttribute markiert sind, dessen AllowMultiple-Eigenschaft auf false festgelegt ist, führt die Anwendung dieser Schlüssel auf bereits mit einem dieser Attribute markierten Quellcode zum Fehlschlagen der Kompilierung.
Zugeordnete ASP.NET-Klassen
Mehrere Klassen im System.Web.Compilation-Namespace ermöglichen Ihrem Code den Zugriff oder Aufruf von Aspnet_compiler.exe außerhalb der IIS-Umgebung. Die ClientBuildManager-Klasse stellt die PrecompileApplication-Methode für die Kompilierung einer Anwendung bereit. Die ClientBuildManager-Klasse verwendet zudem die ClientBuildManagerParameter-Klasse. Dadurch ist es möglich, PrecompilationFlags anzugeben, die den von diesem Tool verwendeten Optionen entsprechen. Außerdem können Schlüssel für starke Namen angegeben werden.
Beispiele
Mit dem folgenden Befehl wird die WebApplication1-Anwendung direkt kompiliert:
Aspnet_compiler -v /WebApplication1
Der folgende Befehl kompiliert die WebApplication1-Anwendung direkt, und das Tool fügt Stapelüberwachungsinformationen hinzu, wenn es Fehlerberichte erstellen muss.
Aspnet_compiler -v /WebApplication1 -errorstack
Mit dem folgenden Befehl wird die Anwendung WebApplication1 über den physikalischen Verzeichnispfad für die Bereitstellung kompiliert. Außerdem werden den Ausgabeassemblys zwei Attribute hinzugefügt. Die -keyfile-Option wird verwendet, um ein AssemblyKeyFileAttribute-Attribut hinzuzufügen. Das Attribut gibt an, dass die Datei Key.sn die Informationen des öffentlichen/privaten Schlüsselpaars enthält, mithilfe derer das Tool die generierten Assemblys mit starken Namen benennen soll. Außerdem verwendet der Befehl die -aptca-Option, um den generierten Assemblys ein AllowPartiallyTrustedCallersAttribute-Attribut hinzuzufügen. Die kompilierte Webanwendung wird im Verzeichnis c:\applicationTarget erstellt.
Aspnet_compiler -v /WebApplication1 -p "c:\Documents and Settings\Default\My Documents\MyWebApplications\WebApplication1" -keyfile "c:\Documents and Settings\Default\My Documents\Key.sn" -aptca c:\applicationTarget
Mit dem folgenden Befehl wird der Dienst WebService2 unter dem Standardmetabasispfad kompiliert, wobei das Zielverzeichnis SampleWebService mit der kompilierten Anwendung überschrieben wird.
Aspnet_compiler -m /LM/W3SVC/1/ROOT/WebService2 -f c:\InetPub\wwwroot\SampleWebService
Siehe auch
Referenz
.NET Framework-Tools
Strong Name-Tool (Sn.exe)
ASP.NET IIS-Registrierungstool (Aspnet_regiis.exe)
AssemblyKeyFileAttribute
AssemblyKeyNameAttribute
AssemblyDelaySignAttribute
AllowPartiallyTrustedCallersAttribute
Konzepte
Verzögertes Signieren einer Assembly
Assemblys mit starkem Namen