Веб-сайт ASP.NET или веб-приложение ASP.NET?


Когда я запускаю новый проект ASP.NET в Visual Studio, я могу создать веб-приложение ASP.NET или создать веб-сайт ASP.NET.

В чем разница между веб-приложением ASP.NET и веб-сайтом ASP.NET? Почему я должен выбирать один над другим?

Является ли ответ разным в зависимости от того, какую версию Visual Studio я использую?



Answers


Веб-сайт:

Проект веб-сайта компилируется «на лету». В итоге вы получаете гораздо больше DLL-файлов, что может быть больно. Это также создает проблемы, когда у вас есть страницы или элементы управления в одном каталоге, которые должны ссылаться на страницы и элементы управления в другом каталоге, поскольку другой каталог еще не может быть скомпилирован в код. Другая проблема может быть в публикации.

Если Visual Studio не будет постоянно использовать одни и те же имена, она будет создавать новые имена для DLL-файлов, создаваемых страницами все время. Это может привести к наличию нескольких закрытых копий DLL-файлов, содержащих одно и то же имя класса, что приведет к появлению большого количества ошибок. Проект Web Site был представлен с Visual Studio 2005, но он оказался не очень популярен.

Веб приложение:

Проект веб-приложений был создан как надстройка и теперь существует как часть SP 1 для Visual Studio 2005. Основные отличия: проект веб-приложений был разработан так, чтобы работать аналогично веб-проектам, поставляемым с Visual Studio 2003. Он будет скомпилируйте приложение в один DLL-файл во время сборки. Чтобы обновить проект, его необходимо перекомпилировать и опубликовать DLL-файл для изменений.

Еще одна приятная особенность проекта веб-приложения - это гораздо проще, чем исключить файлы из представления проекта. В проекте веб-сайта каждый файл, который вы исключаете, переименовывается с ключевым словом exclude в имени файла. В проекте веб-приложений проект просто отслеживает, какие файлы включать / исключать из представления проекта, не переименовывая их, делая вещи намного более аккуратными.

Справка

В статье ASP.NET 2.0 - Web Site vs Web Application также приводятся причины, по которым использовать один, а не другой. Вот отрывок из этого:

  • Вам нужно перенести большие приложения Visual Studio .NET 2003 в VS 2005? используйте проект веб-приложения.
  • Вы хотите открыть и отредактировать любой каталог как веб-проект без создания файла проекта? используйте проект веб-сайта.
  • Во время компиляции вам нужно добавить шаги предварительной сборки и пост-сборки? используйте проект веб-приложения.
  • Вам нужно создать веб-приложение, используя несколько веб-проектов? используйте проект веб-приложения.
  • Вы хотите создать одну сборку для каждой страницы? используйте проект веб-сайта.
  • Вы предпочитаете динамическую компиляцию и работу на страницах без создания всего сайта на каждом просмотре страницы? используйте проект веб-сайта.
  • Вы предпочитаете модель с одним страничным кодом модели кода? используйте проект веб-сайта.

Проекты веб-приложений и проектов веб-сайтов (MSDN) объясняют различия между веб-сайтом и проектами веб-приложений. Также обсуждается конфигурация, которая должна быть выполнена в Visual Studio.




Веб-сайт - это то, что вы развертываете на веб-сервере ASP.NET, таком как IIS. Просто куча файлов и папок. На веб-сайте нет ничего связанного с Visual Studio (нет файла проекта). Генерация кода и компиляция веб-страниц (например, .aspx, .ascx, .master) выполняются динамически во время выполнения , а изменения этих файлов обнаруживаются каркасом и автоматически перекомпилируются. Вы можете поместить код, который хотите разделить между страницами в специальной папке App_Code, или вы можете предварительно скомпилировать его и поместить сборку в папку Bin.

Веб-приложение - это специальный проект Visual Studio. Основное отличие веб-сайтов заключается в том, что при создании проекта все файлы кода скомпилированы в одну сборку, которая помещается в каталог bin. Вы не разворачиваете файлы кода на веб-сервер. Вместо того, чтобы иметь специальную папку для файлов общего кода, вы можете поместить их в любом месте, как и в библиотеке классов. Поскольку веб-приложения содержат файлы, которые не предназначены для развертывания, такие как файлы проекта и кода, в Visual Studio есть команда Publish для вывода веб-сайта в указанное место.

App_Code против Bin

Развертывание файлов общего кода, как правило, является плохой идеей, но это не значит, что вам нужно выбрать веб-приложение. У вас может быть веб-сайт, который ссылается на проект библиотеки классов, который содержит весь код для веб-сайта. Веб-приложения - это просто удобный способ сделать это.

CodeBehind

Этот раздел посвящен файлам .aspx и .ascx. Эта тема становится все более актуальной в новых инфраструктурах приложений, таких как ASP.NET MVC и веб-страницы ASP.NET, которые не используют файлы кода.

Благодаря тому, что все файлы кода, скомпилированные в одну сборку, включая файлы кода .aspx-страниц и элементы управления .ascx, в веб-приложениях необходимо перестроить для каждого небольшого изменения, и вы не можете вносить изменения в реальном времени. Это может быть настоящей болью во время разработки, поскольку вы должны продолжать перестраивать, чтобы видеть изменения, в то время как изменения веб-сайтов обнаруживаются средой выполнения, а страницы / элементы управления автоматически перекомпилируются.

Наличие времени выполнения управления сборками codebehind для вас меньше, так как вам не нужно беспокоиться о том, чтобы предоставить страницы / управлять уникальными именами или организовать их в разных пространствах имен.

Я не говорю, что развертывание файлов кода всегда является хорошей идеей (особенно не для файлов с общим кодом), но файлы кода должны содержать только код, который выполняет определенные пользовательские интерфейсы, проводные обработчики событий и т. Д. Ваше приложение должно быть чтобы важный код всегда попадал в папку Bin. Если это так, то развертывание файлов codebehind не должно считаться вредным.

Еще одним ограничением веб-приложений является то, что вы можете использовать только язык проекта. На веб-сайтах вы можете иметь некоторые страницы на C #, некоторые в VB и т. Д. Нет необходимости в специальной поддержке Visual Studio. Это красота расширяемости поставщика.

Кроме того, в веб-приложениях вы не обнаруживаете ошибки в страницах / элемента управления, поскольку компилятор только компилирует ваши классы кода, а не код разметки (в MVC вы можете исправить это, используя параметр MvcBuildViews), который компилируется во время выполнения.

Visual Studio

Поскольку веб-приложения представляют собой проекты Visual Studio, вы получаете некоторые функции, недоступные на веб-сайтах. Например, вы можете использовать события сборки для выполнения множества задач, например, для минимизации и / или объединения файлов Javascript.

Еще одна приятная функция, представленная в Visual Studio 2010, - это преобразование Web.config . Это также не доступно на веб-сайтах. Теперь работает с веб-сайтами в VS 2013.

Создание веб-приложения происходит быстрее, чем создание веб-сайта, особенно для крупных сайтов. Это связано главным образом с тем, что веб-приложения не компилируют код разметки. В MVC, если вы установите MvcBuildViews в true, тогда он компилирует код разметки, и вы получаете обнаружение ошибок, что очень полезно. Нижняя сторона заключается в том, что каждый раз, когда вы строите решение, он строит полный сайт, который может быть медленным и неэффективным, особенно если вы не редактируете сайт. Я нахожу, что включаю и выключаю MvcBuildViews (что требует выгрузки проекта). С другой стороны, с помощью веб-сайтов вы можете выбрать, хотите ли вы построить сайт как часть решения или нет. Если вы решите не делать этого, то создание решения происходит очень быстро, и вы всегда можете щелкнуть узел веб-узла и выбрать «Сборка», если вы внесли изменения.

В проекте MVC Web Application у вас есть дополнительные команды и диалоги для общих задач, такие как «Добавить вид», «Перейти к представлению», «Добавить контроллер» и т. Д. Они недоступны на веб-сайте MVC.

Если вы используете IIS Express в качестве сервера разработки, на веб-сайтах вы можете добавлять виртуальные каталоги. Этот параметр недоступен в веб-приложениях.

Восстановление пакета NuGet не работает на веб-сайтах, вам необходимо вручную установить пакеты, перечисленные на packages.config Пакет восстановления теперь работает с веб-сайтами, начиная с NuGet 2.7




Веб-сайт = использовать, когда веб-сайт создается графическими дизайнерами, а программисты редактируют только одну или две страницы

Веб-приложение = использовать, когда приложение создано программистами, а графические дизайнеры редактируют только один или два постраничных / изображений.

Веб-сайты могут работать с использованием любых инструментов HTML без необходимости иметь студию разработчиков, так как файлы проекта не нуждаются в обновлении и т. Д. Веб-приложения лучше всего, когда команда в основном использует студию разработчиков и имеет высокий контент кода.

(Некоторые ошибки кодирования находятся в веб-приложениях во время компиляции, которые не встречаются на веб-сайтах до времени выполнения.)

Предупреждение: я написал этот ответ много лет назад и не использовал Asp.net с тех пор. Я ожидаю, что теперь все изменится.




Если у вас нет конкретной потребности в динамически скомпилированном проекте, не используйте проект веб-сайта .

Зачем? Поскольку проект веб-сайта приведет вас к стене, когда вы пытаетесь изменить или понять свой проект. Элементы поиска статической типизации (например, поиск использования, рефакторинг) в Visual Studio будут выполняться навсегда в любом проекте с разумным размером. Для получения дополнительной информации см. Вопрос « Переполнение стека». Медленно «Найти все ссылки» в Visual Studio .

Я действительно не понимаю, почему они отбросили веб-приложения в Visual Studio 2005 для создания проекта, основанного на причинении боли, безумности, производительности проекта карбункула производительности.




В MSDN есть статья, которая описывает различия:

Сравнение проектов веб-сайтов и проектов веб-приложений

Кстати: есть некоторые похожие вопросы по этой теме, например:




Это может показаться немного очевидным, но я думаю, что это то, что неправильно понимается, потому что Visual Studio 2005 только первоначально отправляется на веб-сайт. Если ваш проект имеет дело с сайтом, который является довольно ограниченным и не имеет большого логического или физического разделения, веб-сайт в порядке. Однако, если это действительно веб-приложение с различными модулями, где многие пользователи добавляют и обновляют данные, вам лучше работать с веб-приложением.

Самый большой профи модели веб-сайта заключается в том, что все в разделе app_code динамически компилируется. Вы можете делать обновления файлов C # без полного перераспределения. Однако это приносит огромную жертву. Много вещей происходит под крышками, которые трудно контролировать. Пространства имен трудно контролировать, а использование определенной библиотеки DLL по умолчанию используется для всего, что находится под app_code поскольку все динамически компилируется.

Модель веб-приложения не имеет динамической компиляции, но вы получаете контроль над тем, что я упомянул.

Если вы занимаетесь разработкой n-уровня, я настоятельно рекомендую модель веб-приложения. Если вы делаете ограниченный веб-сайт или быстро и грязно, модель веб-сайта может иметь преимущества.

Более подробный анализ можно найти в:




Из экзамена 70-515 экзаменационного экзамена MCTS для самостоятельного курса:

С веб-приложением (проектом),

  1. Вы можете создать приложение MVC.
  2. Visual Studio хранит список файлов в файле проекта (.csproj или .vbproj), а не полагается на структуру папок.
  3. Вы не можете смешивать Visual Basic и C #.
  4. Вы не можете редактировать код, не останавливая сеанс отладки.
  5. Вы можете устанавливать зависимости между несколькими веб-проектами.
  6. Вы должны скомпилировать приложение перед развертыванием, что не позволяет вам тестировать страницу, если другая страница не будет компилироваться.
  7. Вам не нужно хранить исходный код на сервере.
  8. Вы можете управлять именем и версией сборки.
  9. Вы не можете редактировать отдельные файлы после развертывания без повторной компиляции.



Это зависит от того, что вы разрабатываете.

Веб-сайт, ориентированный на контент, будет часто меняться, и сайт лучше для этого.

Приложение имеет тенденцию хранить свои данные в базе данных, а его страницы и код редко меняются. В этом случае лучше иметь веб-приложение, где развертывание сборок намного более контролируется и имеет лучшую поддержку для модульного тестирования.




Compilation Во-первых, есть разница в компиляции. Веб-сайт не предварительно скомпилирован на сервере, он скомпилирован в файл. Это может быть преимуществом, потому что, когда вы хотите что-то изменить на своем веб-сайте, вы можете просто загрузить определенный файл с сервера, изменить его и загрузить этот файл на сервер, и все будет работать нормально. В веб-приложении вы не можете этого сделать, потому что когда-либо предварительно скомпилировано, и вы получаете только одну DLL. Когда вы меняете что-то в одном файле своего проекта, вам нужно снова скомпилировать все. Поэтому, если вы хотите иметь возможность изменять некоторые файлы на веб-сайте сервера, это лучшее решение для вас. Он также позволяет многим разработчикам работать на одном веб-сайте. С другой стороны, если вы не хотите, чтобы ваш код был доступен на сервере, вы должны выбрать веб-приложение. Этот вариант также лучше подходит для модульного тестирования из-за того, что один файл DLL создается после публикации вашего веб-сайта.

Project structure Существует также различие в структуре проекта. В веб-приложении у вас есть файл проекта, как и в обычном приложении. На веб-сайте нет традиционного файла проекта, все, что у вас есть, - это файл решения. Все ссылки и настройки хранятся в файле web.config. @Page directive есть другой атрибут для файла, который содержит класс, связанный с этой страницей. В веб-приложении он является стандартным «CodeBehind», на веб-сайте используется «CodeFile». Вы можете увидеть это в следующих примерах:

Web Application:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"  
Inherits="WebApplication._Default" %>  

Веб-сайт:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

Пространства имен. В приведенном выше примере вы также видите другое отличие - как создаются пространства имен. В пространстве имен веб-приложений это просто название проекта. На веб-сайте существует пространство имен ASP по умолчанию для динамически скомпилированных страниц.

Редактирование и продолжение. Доступна опция «Редактирование и продолжение веб-приложения» (чтобы включить ее, вы должны перейти в меню «Сервис», затем «Параметры», затем «Изменить» и «Продолжить в отладке»). Эта функция не работает в Web Site.ASP.NET MVCIf, если вы хотите разрабатывать веб-приложения, используя

ASP.NET MVC (Model View Controller) лучшим и стандартным вариантом является веб-приложение. Хотя использование MVC на веб-сайте возможно не рекомендуется.

Резюме. Самое важное различие между веб-приложением ASP.NET и веб-сайтом - это компиляция. Поэтому, если вы работаете над большим проектом, в котором несколько человек могут его изменить, лучше использовать веб-сайт. Но если вы делаете небольшой проект, вы также можете использовать веб-приложение.




Одним из ключевых отличий является то, что веб-сайты компилируются динамически и создают «на лету» сборки. Веб-приложения собираются в одну большую сборку.

Различие между ними было устранено в Visual Studio 2008.




Да, веб-приложение намного лучше, чем веб-сайты, потому что веб-приложения дают нам свободу:

  1. Чтобы иметь несколько проектов под одним зонтиком и устанавливать зависимости проекта между ними. Например, для PCS у нас может быть следующее в веб-приложении -

    • Веб-порталы
    • Контроллер уведомлений (для отправки электронной почты)
    • Бизнес-уровень
    • Уровень доступа к данным
    • Менеджер исключений
    • Утилита сервера
    • Услуги WCF (общие для всех платформ)
    • Элемент списка
  2. Для запуска модульных тестов кода, который находится в файлах классов, связанных с страницами ASP.NET

  3. Чтобы ссылаться на классы, связанные с страницами и пользовательскими элементами управления из автономных классов
  4. Чтобы создать единую сборку для всего сайта
  5. Контроль над именем сборки и номером версии, созданной для сайта
  6. Во избежание размещения исходного кода на рабочем сервере. (Вы можете избежать развертывания исходного кода на сервере IIS. В некоторых сценариях, таких как среды совместного размещения, вы можете быть обеспокоены несанкционированным доступом к исходному коду на сервере IIS. (Для проекта веб-сайта вы можете избежать этого риска предварительная компиляция на компьютере разработки и развертывание сгенерированных сборок вместо исходного кода. Однако в этом случае вы теряете некоторые преимущества простых обновлений сайта.)
  7. Проблема производительности с веб-сайтом (для первого запроса на веб-сайт может потребоваться компиляция сайта, что может привести к задержке. И если веб-сайт работает на сервере IIS, который является коротким по памяти, включая весь сайт в одна сборка может использовать больше памяти, чем потребуется для нескольких сборок.)



Обычно приложения скомпилируются перед развертыванием, когда сайт использует каталог app_code. Когда что-либо изменяется в папке с кодом приложения, сервер будет перекомпилировать код. Это означает, что вы можете добавлять / изменять код с веб-сайта «на лету».

Преимущество приложения заключается в том, что повторная компиляция не производится, поэтому начальное время запуска будет быстрее.




Я рекомендую вам посмотреть видео- проекты веб-приложений и проекты веб-развертывания на веб-сайте ASP.NET, что объясняет разницу в деталях, это было очень полезно для меня.

Кстати, не путайте название, большая часть видео объясняет разницу между проектами веб-сайтов и проектами веб-приложений и почему Microsoft повторно представила проекты веб-приложений в Visual Studio 2005 (как вы, наверное, уже знаете, это первоначально поставлялись только с проектами веб-сайтов, тогда проекты веб-приложений были добавлены в SP1). Отличное видео, которое я очень рекомендую всем, кто хочет узнать разницу.




«Веб-сайт» имеет свой код в специальном каталоге App_Code и скомпилирован в несколько DLL (сборок) во время выполнения. «Веб-приложение» предварительно скомпилировано в одну DLL.




Веб-сайт и проект >> веб-сайт - это два разных метода создания приложения ASP.NET с использованием visual studio. Один из них безпроектирован, а другой - это среда проекта. Различия

  1. Файл решения хранится в том же каталоге, что и корневой каталог в среде проекта.
  2. Перед развертыванием в среде проекта необходимо удалить файлы решений и проектов.
  3. Полный корневой каталог развертывается в среде без проекта.

нет принципиальной разницы в использовании любого подхода. Но если вы создаете веб-сайт, который займет больше времени, выберите среду проекта.




Модель проекта веб-приложения

  • Предоставляет семантику того же Web-проекта, что и веб-проекты Visual Studio .NET. Имеет файл проекта (структура, основанная на файлах проекта). Build model - весь код проекта скомпилирован в единую сборку. Поддерживает как IIS, так и встроенный сервер разработки ASP.NET. Поддерживает все функции Visual Studio 2005 (рефакторинг, дженерики и т. Д.) И ASP.NET (мастер-страницы, членство и логин, навигацию по сайту, темы и т. Д.). Использование FrontPage Server Extensions (FPSE) больше не является обязательным требованием.

Модель проекта веб-сайта

  • Нет файла проекта (на основе файловой системы).
  • Новая модель компиляции.
  • Динамическая компиляция и работа на страницах без создания всего сайта на каждом просмотре страницы.
  • Поддерживает как IIS, так и встроенный сервер разработки ASP.NET.
  • У каждой страницы есть своя сборка.
  • Модель дефферентного кода.



Это всегда зависит от требований вашего клиента. ASP.NET включает в себя гибкие функции, необходимые пользователю для обеспечения безопасности и простого обслуживания вашего приложения.

Вы можете представить веб-приложение как двоичный файл, который выполняется внутри рамки ASP.NET. И веб-сайты как статические веб-страницы, которые вы можете просмотреть и легко развернуть исходный код.

Но преимущество и недостатки этих двух технологий ASP.NET - это то, что хорошо.




В проектах веб-приложений Visual Studio нуждается в дополнительных файлах .designer для страниц и пользовательских элементов управления. Проекты веб-сайта не требуют этих накладных расходов. Сама разметка интерпретируется как дизайн.




WebSite: автоматически создает папку app_code, и если вы публикуете ее на сервере, а после этого, если вы вносите некоторые изменения в какой-либо конкретный файл или страницу, вам не нужно компилировать все файлы.

Веб-приложение. Он автоматически генерирует файл решений, который не генерирует веб-сайт, и если вы меняете один файл, то вам нужно скомпилировать полный проект, чтобы отобразить его изменения.




Веб-приложения требуют больше памяти, по-видимому, потому, что у вас нет выбора, кроме как скомпилировать в одну сборку. Я просто превратил большой старый сайт в веб-приложение и имел проблемы с нехваткой памяти, как во время компиляции, так и с

Unexpected error writing metadata to file '' -- 
Not enough storage is available to complete this operation. 

ошибка и во время выполнения с этой ошибкой:

Exception information: 
    Exception type: HttpException 
    Exception message: Exception of type 'System.OutOfMemoryException' was thrown.
   at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()

Моя рекомендация по преобразованию больших сайтов в аппаратное обеспечение, ограниченное памятью, позволяет вам вернуться к модели веб-сайта. Даже после первоначального успеха проблемы могут появиться позже.




В веб-приложении вы можете создавать слои функциональности своего проекта и создавать между ними взаимозависимости, деля его на многие проекты, но вы никогда не сможете сделать это на веб-сайте.




Определенно веб-приложение, один DLL-файл и прост в обслуживании. Но сайт более гибкий; вы можете редактировать файл aspx на ходу.




Здесь Web Supportive Application является примером веб-сайта. Веб-сайт и веб-приложение могут быть динамическими / статичными в зависимости от требований, вот пример, чтобы понять работу веб-сайта и веб-приложения.




Веб-сайты. Файл решения не будет создан. Если мы хотим создавать веб-сайты, вам не нужна визуальная студия.

Веб-приложение. Будет создан файл решения. Если мы хотим создать веб-приложение, вам нужна визуальная студия. Он создаст один .dll файл в папке bin.