887 Stimmen

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

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

Was ist der Unterschied zwischen ASP.NET Web Application und ASP.NET Web Site? Warum sollte ich das eine dem anderen vorziehen?

Ist die Antwort unterschiedlich, je nachdem, welche Version von Visual Studio ich verwende?

568voto

Andreas Grech Punkte 102197

Website:

El Web-Site Projekt wird im laufenden Betrieb erstellt. Am Ende hat man viel mehr DLL-Dateien, was ein Problem sein kann. 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 weiteres Problem kann bei der Veröffentlichung auftreten.

Wenn Visual Studio nicht angewiesen wird, dieselben Namen ständig wiederzuverwenden, wird es immer wieder neue Namen für die von den Seiten erzeugten DLL-Dateien finden. Das kann dazu führen, dass es mehrere Kopien von DLL-Dateien gibt, die denselben Klassennamen enthalten, was zu einer Vielzahl von Fehlern führen wird. Das Web Site-Projekt wurde mit Visual Studio 2005 eingeführt, hat sich aber nicht durchgesetzt.

Web-Anwendung:

El Web-Anwendung Das Projekt wurde als Add-In erstellt und existiert nun als Teil von SP 1 für Visual Studio 2005. Die Hauptunterschiede sind, dass das Web Application Project wurde so konzipiert, dass es ähnlich funktioniert wie die Webprojekte, die mit Visual Studio 2003 ausgeliefert wurden. Es kompiliert die Anwendung zum Zeitpunkt der Erstellung in eine einzige DLL-Datei. Zeit. Um das Projekt zu aktualisieren, muss es neu kompiliert werden und die DLL-Datei veröffentlicht werden, um Änderungen vorzunehmen.

Eine weitere nützliche Funktion der Webanwendung Projekts ist es viel einfacher, Dateien aus der Projektansicht auszuschließen. In der Web Site-Projekt wird jede Datei, die Sie ausschließen, mit dem Schlüsselwort excluded Schlüsselwort im Dateinamen umbenannt. Im Webanwendungsprojekt wird das Projekt nur das Projekt lediglich, welche Dateien in die Projektansicht aufgenommen/ausgeschlossen werden sollen, ohne ohne sie umzubenennen, was die Sache viel übersichtlicher macht.

Referenz

Der Artikel ASP.NET 2.0 - Projekt Website vs. Webanwendung gibt auch Gründe an, warum man das eine und nicht das andere verwenden sollte. Hier ist ein Auszug daraus:

  • Sie müssen große Visual Studio .NET 2003-Anwendungen auf VS 2005? verwenden Sie das Projekt Webanwendung.
  • Sie möchten ein beliebiges Verzeichnis als Webprojekt öffnen und bearbeiten, ohne eine Projektdatei zu erstellen? Website benutzen Projekt.
  • Sie müssen während der Kompilierung Vor- und Nachbereitungsschritte hinzufügen? Webanwendungsprojekt verwenden.
  • Sie müssen eine Webanwendung mit mehreren Webprojekten erstellen? Projekten erstellen? verwenden Sie das Projekt Webanwendung.
  • Sie möchten für jede Seite eine Baugruppe erstellen? das Projekt "Website" verwenden.
  • Sie bevorzugen die dynamische Kompilierung und die Arbeit an Seiten ohne Aufbau ohne bei jedem Seitenaufruf die gesamte Website aufzubauen? Web verwenden Website-Projekt.
  • Sie bevorzugen das Single-Page-Code-Modell gegenüber dem Code-Behind-Modell? Website benutzen Projekt.

Webanwendungsprojekte versus Website-Projekte (MSDN) werden die Unterschiede zwischen Website- und Webanwendungsprojekten erläutert. Außerdem wird die in Visual Studio vorzunehmende Konfiguration erörtert.

175voto

Max Toro Punkte 27760

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

75voto

Ian Ringrose Punkte 50437

Web-Site \= Verwendung, wenn die Website von Grafikern erstellt wird und die Programmierer nur ein oder zwei Seiten bearbeiten

Web-Anwendung \= Verwendung, wenn die Anwendung von Programmierern erstellt wird und die Grafiker nur eine oder zwei Seiten/Bilder bearbeiten.

Websites können mit beliebigen HTML-Tools bearbeitet werden, ohne dass ein Entwicklerstudio erforderlich ist, da die Projektdateien nicht aktualisiert werden müssen usw. Webanwendungen sind am besten geeignet, wenn das Team überwiegend mit Developer Studio arbeitet und der Codeanteil hoch ist.

(Einige Kodierungsfehler werden in Webanwendungen zur Kompilierungszeit gefunden, die in Websites erst zur Laufzeit gefunden werden).

Warnung: Ich habe diese Antwort vor vielen Jahren geschrieben und seitdem nicht mehr mit Asp.net gearbeitet. Ich nehme an, dass sich die Dinge inzwischen weiterentwickelt haben.

43voto

ninj Punkte 1509

Es sei denn, Sie haben einen besonderen Bedarf an einem dynamisch kompilierten Projekt, Verwenden Sie kein Website-Projekt .

Und warum? Weil ein Website-Projekt Sie vor die Wand fahren wird, wenn Sie versuchen, Ihr Projekt zu ändern oder zu verstehen. Die statischen Typisierungsfunktionen (z.B. Find Usages, Refactor) in Visual Studio brauchen bei jedem Projekt von vernünftiger Größe ewig. Weitere Informationen finden Sie in der Stack Overflow-Frage Langsam "Alle Verweise suchen" in Visual Studio .

Ich kann wirklich nicht verstehen, warum sie Webanwendungen in Visual Studio 2005 für den schmerzverursachenden, die Vernunft raubenden, produktivitätssteigernden Website-Projekttyp fallen gelassen haben.

33voto

M4N Punkte 92235

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

Vergleich von Website-Projekten und Webanwendungsprojekten

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X