Frage ASP.NET-Website oder ASP.NET-Webanwendung?


Wenn ich ein neues ASP.NET-Projekt in Visual Studio starte, kann ich eine ASP.NET-Webanwendung erstellen oder eine ASP.NET-Website erstellen.

Was ist der Unterschied zwischen der ASP.NET-Webanwendung und der ASP.NET-Website? Warum sollte ich einen anderen wählen?

Ist die Antwort abhängig davon, welche Version von Visual Studio ich verwende, unterschiedlich?


777
2017-12-29 16:24


Ursprung


Antworten:


Webseite:

Das Webseite Projekt wird im laufenden Betrieb kompiliert. Sie am Ende mit viel mehr DLL-Dateien, die ein Schmerz sein können. Es gibt auch Probleme, wenn Sie Seiten oder Steuerelemente in einem Verzeichnis haben, die auf Seiten und Steuerelemente in einem anderen Verzeichnis verweisen müssen, da das andere Verzeichnis möglicherweise noch nicht in den Code kompiliert wurde. Ein anderes Problem kann in der Veröffentlichung sein.

Wenn Visual Studio nicht aufgefordert wird, dieselben Namen ständig zu verwenden, werden neue Namen für die DLL-Dateien erstellt, die ständig von Seiten generiert werden. Dies kann dazu führen, dass mehrere DLL-Dateien mit demselben Klassennamen in der Nähe vorliegen. was zu vielen Fehlern führen wird. Das Website-Projekt wurde mit Visual Studio 2005 eingeführt, es hat sich jedoch herausgestellt, dass es nicht sehr beliebt ist.

Internetanwendung:

Das Internetanwendung Projekt wurde als Add-In erstellt und existiert jetzt als Teil von SP 1 für Visual Studio 2005. Die Hauptunterschiede sind das Webanwendungsprojekt wurde entwickelt, um ähnlich zu den Webprojekten zu arbeiten, die mit Visual Studio 2003 geliefert wurden. Es wird die Anwendung in einer einzelnen DLL-Datei bei Erstellung kompilieren Zeit. Um das Projekt zu aktualisieren, muss es neu kompiliert werden und die DLL-Datei veröffentlicht, damit Änderungen eintreten.

Ein weiteres nettes Feature der Web Application Projekt ist es viel einfacher, Dateien von der Projektansicht auszuschließen. In dem Web site project, jede Datei, die Sie ausschließen, wird mit einem ausgeschlossenen umbenannt Schlüsselwort im Dateinamen. Im Web-Anwendungsprojekt das Projekt einfach verfolgt, welche Dateien in die Projektansicht ein- bzw. ausgeschlossen werden sollen Umbenennen, um die Dinge viel aufgeräumter zu machen.

Referenz

Der Artikel ASP.NET 2.0 - Website oder Webanwendungsprojekt gibt auch Gründe, warum man das eine und nicht das andere benutzen sollte. Hier ist ein Auszug davon:

  • Sie müssen große Visual Studio .NET 2003-Anwendungen zu VS migrieren   2005? Verwenden Sie das Webanwendungsprojekt.
  • Sie möchten ein beliebiges Verzeichnis als Webprojekt öffnen und bearbeiten   Erstellen einer Projektdatei? Verwenden Sie die Website   Projekt.
  • Sie müssen während der Kompilierung Pre-Build- und Post-Build-Schritte hinzufügen.    Verwenden Sie das Webanwendungsprojekt.
  • Sie müssen eine Webanwendung mit mehreren Web erstellen   Projekte? Verwenden Sie das Webanwendungsprojekt.
  • Sie möchten für jede Seite eine Assembly generieren? Verwenden Sie das Website-Projekt. 
  • Sie bevorzugen dynamisches Kompilieren und arbeiten auf Seiten ohne zu bauen   gesamte Website auf jeder Seitenansicht? benutze Web   Standortprojekt 
  • Sie bevorzugen ein einseitiges Code-Modell zum Code-Behind-Modell? Verwenden Sie die Website   Projekt.

Webanwendungsprojekte im Vergleich zu Websiteprojekten(MSDN) erläutert die Unterschiede zwischen der Website und den Webanwendungsprojekten. Außerdem wird die Konfiguration in Visual Studio erläutert.


507
2018-03-09 19:16



Webseite ist, was Sie auf einem ASP.NET-Webserver wie IIS bereitstellen. Nur ein paar Dateien und Ordner. Es gibt nichts auf einer Website, das Sie an Visual Studio bindet (es gibt keine Projektdatei). Code-Generierung und Kompilierung von Webseiten (wie .aspx, .ascx, .master) ist abgeschlossen dynamisch zur Laufzeitund Änderungen an diesen Dateien werden vom Framework erkannt und automatisch neu kompiliert. Sie können den gewünschten Code eingeben Teilen Sie zwischen Seiten Im speziellen Ordner "App_Code" können Sie die Datei vorkompilieren und die Assembly im Ordner "Bin" ablegen.

Internetanwendung ist ein spezielles Visual Studio-Projekt. Der Hauptunterschied zu Websites besteht darin, dass beim Erstellen des Projekts alle Codedateien in eine einzelne Assembly kompiliert werden, die im Verzeichnis bin abgelegt wird. Sie stellen keine Code-Dateien auf dem Webserver bereit. Anstatt einen speziellen Ordner für gemeinsam genutzte Code-Dateien zu haben, können Sie sie überallhin platzieren, genau wie in der Klassenbibliothek. Da Webanwendungen Dateien enthalten, die nicht bereitgestellt werden sollen, z. B. Projekt- und Codedateien, gibt es eine Veröffentlichen Befehl in Visual Studio, um eine Website an einen bestimmten Speicherort auszugeben.

App_Code vs Bin

Das Bereitstellen von freigegebenen Codedateien ist normalerweise eine schlechte Idee, aber das bedeutet nicht, dass Sie Webanwendung auswählen müssen. Sie können eine Website erstellen, die auf ein Klassenbibliotheksprojekt verweist, das den gesamten Code für die Website enthält. Web-Anwendungen 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.

Indem alle Code-Dateien in einer einzigen Assembly kompiliert werden, 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 die Änderungen ständig neu erstellen müssen, während bei Websites Änderungen von der Laufzeit erkannt werden und Seiten / Steuerelemente automatisch neu kompiliert werden.

Das Verwalten der Codebehind-Assemblys mit der Laufzeit ist für Sie weniger arbeitsaufwendig, da Sie sich keine Gedanken darüber machen müssen, wie Sie eindeutigen Seiten / Steuerelementen Namen geben oder sie in verschiedenen Namespaces organisieren.

Ich sage nicht, das Bereitstellen von Codedateien ist immer eine gute Idee (speziell nicht im Fall von gemeinsam genutzten Codedateien), aber Codebehind-Dateien sollten nur Code enthalten, der UI-spezifische Aufgaben, Draht-Event-Handler, etc. Ihre Anwendung sollte sein so 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 von Web-Anwendungen besteht darin, dass Sie nur die Sprache des Projekts verwenden können. In Websites können Sie einige Seiten in C #, einige in VB, etc. haben. Keine Notwendigkeit für spezielle Visual Studio-Unterstützung. Das ist die Schönheit der Erweiterbarkeit des Build-Providers.

Außerdem erhalten Sie in Web Applications keine Fehlererkennung in Pages / 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 Webanwendungen Visual Studio-Projekte sind, erhalten Sie einige Funktionen, die auf Websites nicht verfügbar sind. Zum Beispiel können Sie Build-Ereignisse verwenden, um eine Vielzahl von Aufgaben auszuführen, z. Minimieren und / oder Kombinieren von Javascript-Dateien.

Ein weiteres nettes Feature, das in Visual Studio 2010 eingeführt wurde, ist Web.config-Umwandlung. Dies ist auch nicht in Websites verfügbar. Funktioniert jetzt mit Websites in VS 2013.

Das Erstellen einer Webanwendung ist schneller als das Erstellen einer Website speziell für große Websites. Dies liegt hauptsächlich daran, dass Web-Anwendungen den Markup-Code nicht kompilieren. Wenn Sie in MVC MvcBuildViews auf true setzen, kompiliert es den Markup-Code und Sie erhalten eine Fehlererkennung, was sehr nützlich ist. Der Nachteil ist, dass jedes Mal, wenn Sie die Lösung erstellen, die komplette Site erstellt wird, was langsam und ineffizient sein kann, besonders wenn Sie die Site nicht bearbeiten. Ich finde, dass ich MvcBuildViews ein- und ausschalte (was ein Projekt-Entladen erfordert). Auf der anderen Seite können Sie bei Websites auswählen, ob Sie die Site als Teil der Lösung erstellen möchten oder nicht. Wenn Sie dies nicht tun, ist das Erstellen der Lösung sehr schnell und Sie können immer auf den Knoten Website klicken und Build auswählen, wenn Sie Änderungen vorgenommen haben.

In einem MVC-Webanwendungsprojekt verfügen Sie über zusätzliche Befehle und Dialoge für allgemeine Aufgaben wie "Ansicht hinzufügen", "Gehe zu Ansicht", "Controller hinzufügen" usw. Diese sind auf einer MVC-Website nicht verfügbar.

Wenn Sie IIS Express als Entwicklungsserver verwenden, können Sie in Websites virtuelle Verzeichnisse hinzufügen. Diese Option ist in Webanwendungen nicht verfügbar.

Die NuGet-Paketwiederherstellung funktioniert nicht auf Websites. Sie müssen die in der Datei packages.config aufgeführten Pakete manuell installieren Die Paketwiederherstellung funktioniert jetzt mit Websites Starten von NuGet 2.7


153
2018-03-04 14:19



Webseite = verwenden, wenn die Website von Grafikern erstellt wird und die Programmierer nur eine oder zwei Seiten bearbeiten

Internetanwendung = verwenden, wenn die Anwendung von Programmierern erstellt wird und die Grafikdesigner nur ein oder zwei Seiten / Bilder bearbeiten.

Websites können mit beliebigen HTML-Tools bearbeitet werden, ohne dass Entwicklerstudio benötigt wird, da Projektdateien nicht aktualisiert werden müssen. Webanwendungen sind am besten, wenn das Team hauptsächlich Entwicklerstudio verwendet und ein hoher Code-Inhalt vorhanden ist.

(Einige Codierungsfehler werden in Webanwendungen zur Kompilierungszeit gefunden, die bis zur Laufzeit nicht in Websites gefunden werden.)

Warnung:  Ich habe diese Antwort vor vielen Jahren geschrieben und Asp.net seitdem nicht mehr benutzt. Ich gehe davon aus, dass sich die Dinge jetzt weiter entwickelt haben.


69
2017-07-15 20:15



Wenn Sie kein spezifisches Bedürfnis für ein dynamisch kompiliertes Projekt haben, Verwenden Sie kein Website-Projekt.

Warum? Weil das Website-Projekt Sie an die Wand treibt, wenn Sie versuchen, Ihr Projekt zu ändern oder zu verstehen. Die statischen Eingabe-Suchfunktionen (z. B. Suchen nach Verwendungen, Refactor) in Visual Studio werden bei jedem Projekt mit vernünftiger Größe dauern. Weitere Informationen finden Sie in der Frage Stapelüberlauf Langsam "Alle Referenzen finden" in Visual Studio.

Ich kann wirklich nicht verstehen, warum sie Webanwendungen in Visual Studio 2005 für den Projekttyp "Schmerz verursachende, geistig entwässerte Produktivität" freigegeben haben.


37
2018-01-24 12:16



Es gibt einen Artikel in MSDN, der die Unterschiede beschreibt:

Vergleichen von Website-Projekten und Web-Anwendungsprojekten

Übrigens: Es gibt einige ähnliche Fragen zu diesem Thema, z.


26
2017-12-29 17:23



Das klingt vielleicht einleuchtend, aber ich denke, dass es etwas missverstanden ist, weil Visual Studio 2005 ursprünglich nur mit der Website geliefert wurde. Wenn Ihr Projekt eine Website betrifft, die ziemlich begrenzt ist und keine große logische oder physische Trennung aufweist, ist die Website in Ordnung. Wenn es sich jedoch wirklich um eine Webanwendung mit verschiedenen Modulen handelt, bei denen viele Benutzer Daten hinzufügen und aktualisieren, ist die Webanwendung besser.

Der größte Vorteil des Website-Modells ist, dass alles in der app_code Abschnitt wird dynamisch kompiliert. Sie können Aktualisierungen der C # -Datei ohne eine vollständige erneute Bereitstellung vornehmen. Dies ist jedoch ein großes Opfer. Unter den schwer kontrollierbaren Abdeckungen passieren viele Dinge. Namespaces sind schwer zu kontrollieren und die spezifische DLL-Verwendung wird standardmäßig für das gesamte Fenster deaktiviert app_code da alles dynamisch kompiliert wird.

Das Webanwendungsmodell hat keine dynamische Kompilierung, aber Sie haben die Kontrolle über die Dinge, die ich erwähnt habe.

Wenn Sie eine n-Tier-Entwicklung durchführen, empfehle ich das Webanwendungsmodell. Wenn Sie eine begrenzte Website oder eine schnelle und schmutzige Implementierung durchführen, kann das Website-Modell Vorteile haben.

Eine detailliertere Analyse finden Sie in:


19
2017-07-07 11:56



Aus dem MCTS-selbstlernenden Trainingssatz-Examen 70-515 Buch:

Mit Web-Anwendung (Projekt),

  1. Sie können eine MVC-Anwendung erstellen.
  2. Visual Studio speichert die Liste der Dateien in einer Projektdatei (.csproj oder .vbproj), anstatt sich auf die Ordnerstruktur zu verlassen.
  3. Sie können Visual Basic und C # nicht mischen.
  4. Sie können Code nicht bearbeiten, ohne eine Debugging-Sitzung anzuhalten.
  5. Sie können Abhängigkeiten zwischen mehreren Webprojekten herstellen.
  6. Sie müssen die Anwendung vor der Bereitstellung kompilieren, damit Sie keine Seite testen können, wenn eine andere Seite nicht kompiliert wird.
  7. Sie müssen den Quellcode nicht auf dem Server speichern.
  8. Sie können den Assemblynamen und die Version steuern.
  9. Sie können einzelne Dateien nach der Bereitstellung nicht erneut kompilieren.

18
2018-01-03 13:52