Web-Site ist das, was Sie auf einem ASP.NET-Webserver wie IIS bereitstellen. Es handelt sich dabei um eine Reihe von Dateien und Ordnern. In einer Website gibt es nichts, was Sie an Visual Studio bindet (es gibt keine Projektdatei). Die Code-Generierung und Kompilierung von Webseiten (wie .aspx, .ascx, .master) erfolgt dynamisch während der Laufzeit und Änderungen an diesen Dateien werden vom Framework erkannt und automatisch neu kompiliert. Sie können den Code, den Sie in die zwischen Seiten austauschen in den speziellen App_Code-Ordner, oder Sie können es vorkompilieren und die Baugruppe in den Bin-Ordner legen.
Web-Anwendung ist ein spezielles Visual Studio-Projekt. Der Hauptunterschied zu Web Sites besteht darin, dass beim Erstellen des Projekts alle Codedateien in eine einzige Assembly kompiliert werden, die im Verzeichnis bin abgelegt wird. Sie stellen die Codedateien nicht auf dem Webserver bereit. Anstatt einen speziellen Ordner für gemeinsam genutzte Codedateien zu haben, können Sie sie überall ablegen, genau wie in der Klassenbibliothek. Da Webanwendungen Dateien enthalten, die nicht für den Einsatz gedacht sind, wie z. B. Projekt- und Codedateien, gibt es einen veröffentlichen. Befehl in Visual Studio, um eine Website an einem bestimmten Ort auszugeben.
App_Code vs. Bin
Die Bereitstellung von gemeinsam genutzten Codedateien ist im Allgemeinen eine schlechte Idee, aber das bedeutet nicht, dass Sie sich für Webanwendungen 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 einfach 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 Web Pages, die keine Codebehind-Dateien verwenden, immer weniger relevant.
Indem alle Codedateien in eine einzige Assembly kompiliert werden, einschließlich codebehind Dateien von .aspx-Seiten und .ascx-Steuerelementen müssen Sie in Webanwendungen bei jeder kleinen Änderung neu erstellen und können keine Live-Änderungen vornehmen. Dies kann während der Entwicklung sehr lästig sein, da Sie immer wieder neu erstellen müssen, um die Änderungen zu sehen, während bei Websites Änderungen von der Laufzeit erkannt und die Seiten/Steuerelemente automatisch neu kompiliert werden.
Wenn die Laufzeitumgebung die Code-Behind-Assemblies verwaltet, bedeutet dies weniger Arbeit für Sie, da Sie sich nicht darum kümmern müssen, Seiten/Steuerelemente mit eindeutigen Namen zu versehen oder sie in verschiedenen Namensräumen zu organisieren.
Ich behaupte nicht, dass das Bereitstellen von Codedateien immer eine gute Idee ist (vor allem nicht im Fall von gemeinsam genutzten Codedateien), aber Code Behind-Dateien sollten nur Code enthalten, der UI-spezifische Aufgaben ausführt, Event-Handler verdrahtet usw. Ihre Anwendung sollte so geschichtet sein, dass wichtiger Code immer im Bin-Ordner landet. Wenn dies der Fall ist, sollte die Bereitstellung von Codebehind-Dateien nicht als schädlich angesehen werden.
Eine weitere Einschränkung bei Webanwendungen ist, dass Sie nur die Sprache des Projekts verwenden können. In Web Sites können Sie einige Seiten in C#, einige in VB usw. haben. Sie brauchen keine spezielle Unterstützung für Visual Studio. Das ist das Schöne an der Erweiterbarkeit des Build-Providers.
Auch in Webanwendungen erhalten Sie keine Fehlererkennung in Seiten/Controls, da der Compiler nur Ihre Codebehind-Klassen kompiliert und nicht den Markup-Code (in MVC können Sie dies mit der Option MvcBuildViews beheben), der zur Laufzeit kompiliert wird.
Visual Studio
Da es sich bei Webanwendungen um Visual Studio-Projekte handelt, stehen Ihnen einige Funktionen zur Verfügung, die in Websites nicht verfügbar sind. So können Sie beispielsweise Build-Ereignisse verwenden, um eine Vielzahl von Aufgaben durchzuführen, z. B. das Minifizieren und/oder Kombinieren von Javascript-Dateien.
Eine weitere nette Funktion, die in Visual Studio 2010 eingeführt wurde, ist Web.config-Umwandlung . Dies ist auch auf Websites nicht möglich. Funktioniert jetzt mit Websites in VS 2013.
Die Erstellung einer Webanwendung ist schneller als die einer Website, insbesondere bei großen Websites. Das liegt vor allem 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 kompiliert wird, was langsam und ineffizient sein kann, vor allem, wenn Sie die Site nicht bearbeiten. Ich schalte MvcBuildViews ein und aus (was ein Entladen des Projekts erfordert). Andererseits können Sie bei Web Sites wählen, ob Sie die Site als Teil der Lösung erstellen wollen oder nicht. Wenn Sie sich dagegen entscheiden, geht das Erstellen der Lösung sehr schnell, und Sie können jederzeit auf den Knoten "Website" klicken und "Erstellen" wählen, wenn Sie Änderungen vorgenommen haben.
In einem MVC-Webanwendungsprojekt gibt es zusätzliche Befehle und Dialogfelder für gängige Aufgaben wie 'Add View', 'Go To View', 'Add Controller', usw. Diese sind in einer MVC-Website nicht verfügbar.
Wenn Sie IIS Express als Entwicklungsserver verwenden, können Sie in Web Sites virtuelle Verzeichnisse hinzufügen. Diese Option ist in Webanwendungen nicht verfügbar.
NuGet Package Restore funktioniert nicht auf Websites, Sie müssen die in der packages.config aufgeführten Pakete manuell installieren Paketwiederherstellung funktioniert jetzt mit Websites NuGet 2.7 starten