Die Website stellen Sie auf einem ASP.NET-Webserver wie IIS bereit. Nur ein paar Dateien und Ordner. Eine Website enthält nichts, was Sie mit Visual Studio verbindet (es gibt keine Projektdatei). Die Codegenerierung und Kompilierung von Webseiten (wie .aspx, .ascx, .master) erfolgt dynamisch zur Laufzeit . Änderungen an diesen Dateien werden vom Framework erkannt und automatisch neu kompiliert. Sie können Code, den Sie zwischen Seiten teilen möchten, in den speziellen Ordner App_Code einfügen oder ihn vorkompilieren und die Assembly in den Ordner Bin legen.
Die Webanwendung ist ein spezielles Visual Studio-Projekt. Der Hauptunterschied zu Websites besteht darin, dass beim Erstellen des Projekts alle Codedateien in einer einzigen Assembly kompiliert werden, die im bin-Verzeichnis abgelegt wird. Sie stellen keine Codedateien auf dem Webserver bereit. Anstatt einen speziellen Ordner für gemeinsam genutzte Codedateien zu haben, können Sie diese wie in der Klassenbibliothek an einer beliebigen Stelle ablegen. Da Webanwendungen Dateien enthalten, die nicht bereitgestellt werden sollen, z. B. Projekt- und Codedateien, gibt es in Visual Studio den Befehl Veröffentlichen, mit dem eine Website an einem bestimmten Speicherort ausgegeben werden kann.
App_Code vs Bin
Das Bereitstellen von gemeinsam genutzten Codedateien ist im Allgemeinen eine schlechte Idee. Dies bedeutet jedoch nicht, dass Sie sich für eine Webanwendung entscheiden müssen. Sie können eine Website haben, die auf ein Klassenbibliotheksprojekt verweist, das den gesamten Code für die Website enthält. Webanwendungen sind nur eine bequeme Möglichkeit, dies zu tun.
CodeBehind
Dieses Thema ist spezifisch für ASPX- und ASCX-Dateien. Dieses Thema ist in neuen Anwendungsframeworks wie ASP.NET MVC und ASP.NET-Webseiten, die keine Codebehind-Dateien verwenden, immer weniger relevant.
Wenn Sie alle Codedateien in einer einzigen Assembly kompilieren lassen, einschließlich Codebehind- Dateien von ASPX-Seiten und ASCX-Steuerelementen, müssen Sie in Webanwendungen für jede kleine Änderung neu erstellen, und Sie können keine Live-Änderungen vornehmen. Dies kann während der Entwicklung sehr schmerzhaft sein, da Sie immer wieder neu erstellen müssen, um die Änderungen zu sehen, während bei Websites Änderungen von der Laufzeit erkannt werden und Seiten / Steuerelemente automatisch neu kompiliert werden.
Die Laufzeitverwaltung der Codebehind-Assemblys ist für Sie weniger aufwendig, da Sie sich nicht darum kümmern müssen, Seiten / Steuerelementen eindeutige Namen zu geben oder sie in verschiedenen Namespaces zu organisieren.
Ich sage nicht, dass das Bereitstellen von Codedateien immer eine gute Idee ist (insbesondere nicht im Fall von gemeinsam genutzten Codedateien), aber Codebehind-Dateien sollten nur Code enthalten, der UI-spezifische Aufgaben, Handler für Verbindungsereignisse usw. ausführt. Ihre Anwendung sollte es sein geschichtet, so dass wichtiger Code immer im Ordner Bin landet. Wenn dies der Fall ist, sollte die Bereitstellung von Codebehind-Dateien nicht als schädlich angesehen werden.
Eine weitere Einschränkung von Webanwendungen besteht darin, dass Sie nur die Sprache des Projekts verwenden können. Auf Websites können einige Seiten in C #, einige in VB usw. vorhanden sein. Es ist keine spezielle Visual Studio-Unterstützung erforderlich. Das ist das Schöne an der Erweiterbarkeit des Build-Anbieters.
Außerdem erhalten Sie in Webanwendungen keine Fehlererkennung in Seiten / Steuerelementen, da der Compiler nur Ihre Codebehind-Klassen und nicht den Markup-Code kompiliert (in MVC können Sie dies mit der Option MvcBuildViews beheben), die zur Laufzeit kompiliert wird.
Visual Studio
Da Webanwendungen Visual Studio-Projekte sind, erhalten Sie einige Funktionen, die auf Websites nicht verfügbar sind. Sie können beispielsweise Build-Ereignisse verwenden, um eine Vielzahl von Aufgaben auszuführen, z. B. das Minimieren und / oder Kombinieren von Javascript-Dateien.
Eine weitere nette Funktion, die in Visual Studio 2010 eingeführt wurde, ist die Web.config-Transformation .Dies ist auch auf Websites nicht verfügbar. Funktioniert jetzt mit Websites in VS 2013.
Das Erstellen einer Webanwendung ist schneller als das Erstellen einer Website, insbesondere für große Websites. Dies liegt hauptsächlich daran, dass Webanwendungen den Markup-Code nicht kompilieren. Wenn Sie in MVC MvcBuildViews auf true setzen, wird der Markup-Code kompiliert und Sie erhalten eine Fehlererkennung, was sehr nützlich ist. Der Nachteil ist, dass jedes Mal, wenn Sie die Lösung erstellen, die gesamte Site erstellt wird. Dies kann langsam und ineffizient sein, insbesondere wenn Sie die Site nicht bearbeiten. Ich stelle fest, dass ich MvcBuildViews ein- und ausschalte (was das Entladen eines Projekts erfordert). Auf der anderen Seite können Sie bei Websites auswählen, ob Sie die Website als Teil der Lösung erstellen möchten oder nicht. Wenn Sie dies nicht möchten, ist die Erstellung der Lösung sehr schnell. Sie können jederzeit auf den Knoten Website klicken und Erstellen auswählen, wenn Sie Änderungen vorgenommen haben.
In einem MVC-Webanwendungsprojekt verfügen Sie über zusätzliche Befehle und Dialogfelder für allgemeine Aufgaben wie "Ansicht hinzufügen", "Zur Ansicht wechseln", "Controller hinzufügen" usw. Diese sind auf einer MVC-Website nicht verfügbar.
Wenn Sie IIS Express als Entwicklungsserver verwenden, können Sie auf Websites virtuelle Verzeichnisse hinzufügen. Diese Option ist in Webanwendungen nicht verfügbar.
NuGet Package Restore funktioniert nicht auf Websites. Sie müssen die in packages.config aufgelisteten Pakete manuell installierenDie Paketwiederherstellung funktioniert jetzt mit Websites , auf denen NuGet 2.7 gestartet wird