Witryna sieci Web jest wdrażana na serwerze sieci Web ASP.NET, takim jak IIS. Tylko kilka plików i folderów. W witrynie sieci Web nie ma nic, co wiązałoby Cię z programem Visual Studio (nie ma pliku projektu). Generowanie kodu i kompilacja stron internetowych (takich jak .aspx, .ascx, .master) odbywa się dynamicznie w czasie wykonywania , a zmiany w tych plikach są wykrywane przez środowisko i automatycznie kompilowane ponownie. Możesz umieścić kod, który chcesz udostępnić między stronami, w specjalnym folderze App_Code lub możesz go wstępnie skompilować i umieścić zespół w folderze Bin.
Aplikacja internetowa to specjalny projekt Visual Studio. Główną różnicą w stosunku do witryn sieci Web jest to, że podczas tworzenia projektu wszystkie pliki kodu są kompilowane w jednym zestawie, który jest umieszczony w katalogu bin. Nie wdrażasz plików kodu na serwerze WWW. Zamiast specjalnego folderu dla współdzielonych plików kodu możesz je umieścić w dowolnym miejscu, tak jak w bibliotece klas. Ponieważ aplikacje sieci Web zawierają pliki, których nie należy wdrażać, takie jak pliki projektu i kodu, w programie Visual Studio istnieje polecenie Opublikuj, aby wyprowadzić witrynę sieci Web do określonej lokalizacji.
App_Code vs Bin
Wdrażanie współdzielonych plików kodu jest ogólnie złym pomysłem, ale to nie znaczy, że musisz wybrać aplikację internetową. Możesz mieć witrynę sieci Web, która odwołuje się do projektu biblioteki klas, który zawiera cały kod witryny sieci Web. Aplikacje internetowe to tylko wygodny sposób na zrobienie tego.
CodeBehind
Ten temat dotyczy plików .aspx i .ascx. Temat ten ma coraz mniejsze znaczenie w nowych ramach aplikacji, takich jak ASP.NET MVC i strony sieci Web ASP.NET, które nie używają plików typu codebehind.
Poprzez wszystkie pliki kod skompilowany w jednym zespole, w tym kodzie plików .aspx stron i .ascx kontroli, w Web Applications trzeba odbudować dla każdej małej zmianie i nie można dokonać zmian na żywo. Może to być bardzo uciążliwe podczas programowania, ponieważ trzeba ciągle przebudowywać, aby zobaczyć zmiany, podczas gdy w przypadku witryn sieci Web zmiany są wykrywane przez środowisko wykonawcze, a strony / elementy sterujące są automatycznie rekompilowane.
Zarządzanie środowiskiem wykonawczym zespołów kodu jest mniej pracy, ponieważ nie musisz martwić się o nadawanie stronom / kontrolkom unikalnych nazw lub organizowanie ich w różne przestrzenie nazw.
Nie twierdzę, że wdrażanie plików kodu jest zawsze dobrym pomysłem (szczególnie nie w przypadku plików kodu współużytkowanego), ale pliki typu codebehind powinny zawierać tylko kod, który wykonuje zadania specyficzne dla interfejsu użytkownika, procedury obsługi zdarzeń podłączania itp. Twoja aplikacja powinna być warstwowe, aby ważny kod zawsze trafiał do folderu Bin. W takim przypadku wdrożenie plików typu codebehind nie powinno być uważane za szkodliwe.
Kolejnym ograniczeniem aplikacji internetowych jest to, że można używać tylko języka projektu. Na stronach internetowych możesz mieć kilka stron w języku C #, niektóre w VB itp. Nie ma potrzeby specjalnej obsługi programu Visual Studio. To właśnie piękno rozszerzalności dostawcy kompilacji.
Ponadto w aplikacjach internetowych nie wykrywa się błędów na stronach / kontrolkach, ponieważ kompilator kompiluje tylko klasy kodu, a nie kod znaczników (w MVC można to naprawić za pomocą opcji MvcBuildViews), która jest kompilowana w czasie wykonywania.
Visual Studio
Ponieważ aplikacje sieci Web są projektami Visual Studio, niektóre funkcje są niedostępne w witrynach sieci Web. Na przykład można użyć zdarzeń kompilacji do wykonania różnych zadań, np. Zminimalizowania i / lub łączenia plików JavaScript.
Kolejną przyjemną funkcją wprowadzoną w Visual Studio 2010 jest transformacja Web.config .Nie jest to również dostępne na stronach internetowych. Teraz działa z witrynami sieci Web w VS 2013.
Budowanie aplikacji internetowej jest szybsze niż budowanie witryny internetowej, szczególnie w przypadku dużych witryn. Wynika to głównie z tego, że aplikacje sieci Web nie kompilują kodu znaczników. W MVC, jeśli ustawisz MvcBuildViews na wartość true, wówczas kompiluje kod znaczników i otrzymujesz wykrywanie błędów, co jest bardzo przydatne. Wadą jest to, że za każdym razem, gdy tworzysz rozwiązanie, buduje ono kompletną witrynę, która może być powolna i nieefektywna, szczególnie jeśli nie edytujesz witryny. Zauważyłem, że włączam i wyłączam MvcBuildViews (co wymaga odciążenia projektu). Z drugiej strony, dzięki Witrynom internetowym możesz wybrać, czy chcesz zbudować witrynę jako część rozwiązania, czy nie. Jeśli nie, budowanie rozwiązania jest bardzo szybkie i zawsze możesz kliknąć węzeł Witryny sieci Web i wybrać Kompiluj, jeśli dokonałeś zmian.
W projekcie aplikacji sieciowej MVC masz dodatkowe polecenia i okna dialogowe do typowych zadań, takich jak „Dodaj widok”, „Przejdź do widoku”, „Dodaj kontroler” itp. Nie są one dostępne na stronie internetowej MVC.
Jeśli używasz IIS Express jako serwera programistycznego, w witrynach internetowych możesz dodawać katalogi wirtualne. Ta opcja nie jest dostępna w aplikacjach internetowych.
Przywracanie pakietów NuGet nie działa w witrynach sieci Web, musisz ręcznie zainstalować pakiety wymienione na pakietach.configPrzywracanie pakietów działa teraz z witrynami sieci Web od wersji NuGet 2.7