Welche Auswirkung hat die neue Vorkompilierung während der Veröffentlichungsoption auf MVC4-Anwendungen?

84

Daher habe ich Visual Studio 2012 kürzlich auf Update 2 aktualisiert. Siehe, beim nächsten Veröffentlichen meiner Anwendung (in diesem Fall über File Publish) stelle ich fest, dass es drei neue Optionen gibt:

  1. Löschen Sie alle vorhandenen Dateien vor der Veröffentlichung
  2. Vorkompilieren während der Veröffentlichung (mit einem Link zu Konfigurieren)
  3. Schließen Sie Dateien aus dem Ordner App_Data aus

Die erste und dritte Option sind ziemlich selbsterklärend, aber ich kann keine Dokumentation zur zweiten Option finden, da diese für MVC gilt. Wenn ich es überprüfe, scheint sich an den auf der Site erstellten Dateien nichts zu ändern, und ich sehe keine wirkliche Änderung der Leistung.

Elsimer
quelle
Der Speicherort der Funktion ist möglicherweise neu, die Funktion selbst jedoch nicht. Auch wenn das Kompilieren von MVC nicht berücksichtigt wurde, sind WebForms in einem MVC-Projekt interoperabel.
Grant Thomas

Antworten:

84

Die Verwendung des ASP.NET-Precompilers kann folgende Auswirkungen auf Ihre MVC-App haben:

  • Wenn Sie etwas in App_Code haben, wird es vor der Bereitstellung in eine DLL vorkompiliert. Ohne Vorkompilierung würde dies im laufenden Betrieb durch die ASP.NET-Laufzeit geschehen.
  • Wenn Sie die Option wählen , um nicht Ihre Seiten aktualisierbar (dh deaktivieren Sie das erste Kontrollkästchen in dem erweiterten Einstellungen - Dialog) zu machen, wird es auch precompile Ihrer Ansichten (ASPX und Razor) statt als auch diejenigen , dynamisch zur Laufzeit zu kompilieren. Mit der Standardeinstellung (aktiviert) von "Aktualisieren vorkompilierter Site zulassen" können Sie Ihren Ansichtsinhalt aktualisieren, ohne das gesamte Projekt neu erstellen zu müssen.

Wenn Sie keine Dateien in App_Code haben und möchten, dass Ihre Site aktualisierbar bleibt, scheint dies nicht viel zu bewirken.

Jimmy
quelle
7
@Elsimer Ihre .cshtml-Dateien sind weiterhin vorhanden. Wenn ihr Inhalt jedoch vorkompiliert ist, wird der Inhalt durch "Dies ist eine Markierungsdatei, die vom Vorkompilierungs-Tool generiert wurde und nicht gelöscht werden sollte!" Ersetzt.
Jimmy
4
Außerdem werden die Leistungsgewinne meistens beim ersten Start der Site erzielt, wenn der Compiler für jede Seite dynamisch aufgerufen wird. Sobald die Seite einmal aufgerufen (und kompiliert) wurde, wird dieses Kompilierungsergebnis beim nachfolgenden Laden der Seite verwendet, auch wenn Sie nicht vorkompiliert haben.
Jimmy
15
Ein zusätzlicher Vorteil, wenn Ihre Seiten NICHT aktualisierbar sind, besteht darin, dass VS Tippfehler in Ihren Ansichten findet, bevor sie auf Ihre Live-Site gelangen.
Chris
4
@Chris Sie sollten Ihre Teststrategie überdenken, wenn solche Fehler ohne die Option zum Vorkompilieren nicht behoben würden.
user247702
2
@ AndersLindén: Testen Sie einfach die tatsächlich gerenderte Reaktion Ihrer Controller-Aktionen. Dadurch wird Razor aufgerufen, und wenn eine Ausnahme generiert wird, schlägt Ihr Test fehl. Dies ist jedoch auch der Grund, warum Ihre Ansichten im Code sehr leicht sein sollten . Sie können nicht wirklich feinkörnige Unit-Tests für Ansichtscode durchführen, wie Sie es für eine Klasse tun können. Es ist so ziemlich nur bestanden oder nicht bestanden, und selbst dann bedeutet Bestehen nur, dass es keine Ausnahmen generiert hat, nicht, dass es tatsächlich das getan hat, was es sollte.
Chris Pratt