2012-08-15 14 views
19

Ich habe eine Website mehrmals mit dem Standard "Erlaube diese vorkompilierte Website zu aktualisieren" erstellt, aber auf der letzten Kompilierung war die Website sehr kaputt. Nachdem ich mit den .dlls herumgespielt hatte (Löschen und Ersetzen, in der Bin), bemerkte ich, dass bestimmte Teile der Website wieder funktionierten, aber wenn ich alle ursprünglichen .dll's in die Site legte, war es kaputt.Was ist der Unterschied zwischen einer aktualisierbaren vorkompilierten Visual Studio-Webseite und nicht?

Ich benutze ASPX-Seiten mit mehreren Ajax-Web-Erweiterungen. Diese wurden kürzlich hinzugefügt und können die Ursache des Problems sein. Ich habe die Option "Diese vorkompilierte Site kann aktualisierbar sein" deaktiviert und alle Arten von extra kompilierten Code-Dateien in die Bin hinzugefügt, und alle Probleme mit der Website verschwanden ... Was ist hier los? Was war der Unterschied?

Es scheint keinen Unterschied in der Art und Weise zu geben, wie ich die Site aktualisiere, sondern nur eine direkte Veröffentlichung von Visual Studio.

Alle Einsichten würden geschätzt werden.

Antwort

16

Das Häkchen bei "Erlaube, dass diese vorkompilierte Site aktualisierbar ist" kompiliert die .Aspx-Seiten, nicht nur die Codedateien (.VB/.CS). Wenn Sie diese Option aktiviert lassen, können Sie bestimmte Änderungen an den .Aspx-Dateien vornehmen, nachdem diese ohne Neukompilierung implementiert wurden (z. B. die Position eines Steuerelements verschieben oder zusätzliches HTML-Markup hinzufügen).

Nach dem Lesen Ihrer Beschreibung der Bereitstellungsprobleme scheint es wahrscheinlicher, dass die Fehler darauf zurückzuführen sind, dass IIS den App Pool aktualisiert hat. Bei einem Low-End-VPS macht es manchmal Sinn, es neu zu starten, wenn Sie diesen Luxus haben.

Lesen Sie die folgenden MSDN-Artikel für weitere Informationen zu Site Precompilation.

http://msdn.microsoft.com/en-us/library/399f057w(v=vs.80).aspx

http://msdn.microsoft.com/en-us/library/ms247286(v=vs.80).aspx

5

Ich habe eine Antwort für meine eigenen Fragen, bezogen auf das Gesagte NoAlias. Ich las die beiden Links und fanden die folgende:

Vorkompilieren für die Bereitstellung Nur
Wenn Sie für die Bereitstellung vorkompilieren nur der Compiler Baugruppen aus praktisch allen ASP.NET Quelldateien erzeugt, die normalerweise kompiliert werden bei Laufzeit Dazu gehören Programmcode in Seiten, .cs und .vb Klassendateien, andere Codedateien und Ressourcendateien. Der Compiler entfernt alle Quellen und Markups von der Ausgabe. Im resultierenden Layout werden kompilierte Dateien für jede der ASPX-Dateien (mit der Erweiterung .compiled) generiert, die Zeiger auf die entsprechende Assembly für diese Seite enthalten. Um die -Website einschließlich des Seitenlayouts zu ändern, müssen Sie die ursprünglichen -Dateien ändern, die Website neu kompilieren und das Layout erneut bereitstellen. Die einzige Ausnahme ist die Website-Konfiguration; Sie können Änderungen an der Datei Web.config auf dem Produktionsserver vornehmen, ohne die Site neu kompilieren zu müssen. Diese Option bietet den höchsten Schutz für Ihre Seiten und die beste Leistung beim Start.

Vorkompilieren für die Bereitstellung und Aktualisierung
Wenn Sie für die Bereitstellung und Aktualisierung vorkompilieren, die Compiler Baugruppen aus allen Quellcode erzeugt (mit Ausnahme von Seitencode in Single-File-Seiten) und aus anderen Dateien, die normalerweise Baugruppen erzeugen wie Ressourcendateien. Der Compiler konvertiert ASPX-Dateien in einzelne Dateien, die das kompilierte CodeBehind-Modell verwenden, und kopiert sie in das Layout . Mit dieser Option können Sie nach dem Kompilieren die Änderungen an den ASP.NET-Webseiten in Ihrer Site auf beschränken. Für Beispiel können Sie die Anordnung der Steuerelemente, Farben, Schriftarten, und andere Erscheinungsaspekte von Seiten ändern. Sie können auch Steuerelemente wie hinzufügen, solange sie keine Ereignishandler oder anderen Code erfordern. Wenn die Site das erste Mal ausgeführt wird, führt ASP.NET eine weitere Kompilierung in Reihenfolge durch, um Ausgabe aus dem Markup zu erstellen. Hinweis

Eine vorkompilierte aktualisierbare Site lässt nicht zu, dass mehrere Seiten dieselbe CodeFile-Klasse referenzieren.

Ich hatte vor kurzem Änderungen an der Website 2 aspx Seiten enthalten, die die gleiche Codefile (das gleiche VB-Code im Hintergrund) verwiesen Jede Seite etwas andere HTML-Eigenschaften hatte, aber benötigt identisch CodeFiles haben, also für Meine zweite ASP-Seite Ich löschte die automatisch generierte VB-Code-Datei und referenzierte dann eine andere CodeFile im HTML.

Wie oben erwähnt, erlauben vorkompilierte aktualisierbare Sites nicht, dass mehrere Seiten auf dieselbe Code-Dateiklasse verweisen. Aus diesem Grund funktionierten einige meiner Seiten nicht.

Ab diesem Zeitpunkt muss ich das Standard-Kontrollkästchen "Erlaube, dass diese vorkompilierte Site aktualisierbar ist" vermeiden; Es muss für meine Website deaktiviert bleiben, um die VB CodeFiles zu verwenden, die auf meine verschiedenen Seiten verweisen.

Fazit: Mehrere Aspx-Seiten, die auf dieselbe CodeFile verweisen, müssen vorkompiliert werden, damit sie korrekt ausgeführt werden können. Dies bedeutet, dass auf der Website keine Änderungen vorgenommen werden können, ohne dass Änderungen vorgenommen werden müssen.