Веб-сайт - это то, что вы развертываете на веб-сервере ASP.NET, таком как IIS. Просто куча файлов и папок. На веб-сайте нет ничего, что связывало бы вас с Visual Studio (там нет файла проекта). Генерация кода и компиляция веб-страниц (таких как .aspx, .ascx, .master) выполняется динамически во время выполнения , и изменения в этих файлах обнаруживаются платформой и автоматически перекомпилируются. Вы можете поместить код, которым вы хотите поделиться между страницами, в специальную папку App_Code, или вы можете предварительно скомпилировать его и поместить сборку в папку Bin.
Веб-приложение - это особый проект Visual Studio. Основное отличие веб-сайтов состоит в том, что при сборке проекта все файлы кода компилируются в одну сборку, которая размещается в каталоге bin. Вы не размещаете файлы кода на веб-сервере. Вместо того, чтобы иметь специальную папку для файлов с общим кодом, вы можете поместить их куда угодно, как в библиотеке классов. Поскольку веб-приложения содержат файлы, которые не предназначены для развертывания, например файлы проекта и кода, в Visual Studio есть команда « Опубликовать » для вывода веб-сайта в указанное место.
App_Code vs Bin
Развертывание файлов с общим кодом, как правило, плохая идея, но это не значит, что вам нужно выбирать веб-приложение. У вас может быть веб-сайт, который ссылается на проект библиотеки классов, в котором содержится весь код веб-сайта. Веб-приложения - это просто удобный способ сделать это.
CodeBehind
Этот раздел относится к файлам .aspx и .ascx. Этот раздел становится все менее актуальным в новых инфраструктурах приложений, таких как ASP.NET MVC и ASP.NET Web Pages, которые не используют файлы кода.
Имея все файлы , код компилируется в одну сборку, включая CodeBehind файлов .aspx страниц и .ascx управления, в веб - приложениях , вы должны заново строить для каждого небольшого изменения, и вы не можете сделать живые изменения. Это может быть настоящей болью во время разработки, так как вам нужно продолжать перестройку, чтобы увидеть изменения, в то время как с веб-сайтами изменения обнаруживаются средой выполнения, а страницы / элементы управления автоматически перекомпилируются.
Наличие среды выполнения, управляющей сборками codebehind, является для вас менее трудной задачей, поскольку вам не нужно беспокоиться о присвоении страницам / элементам управления уникальных имен или организации их в разных пространствах имен.
Я не говорю, что развертывание файлов кода - это всегда хорошая идея (особенно не в случае файлов с общим кодом), но файлы со связанными кодами должны содержать только код, выполняющий специфические для пользовательского интерфейса задачи, обработчики событий подключения и т. Д. так, чтобы важный код всегда попадал в папку Bin. Если это так, то развертывание кодовых файлов не должно считаться вредным.
Еще одним ограничением веб-приложений является то, что вы можете использовать только язык проекта. На веб-сайтах вы можете иметь несколько страниц на C #, некоторые на VB и т. Д. Нет необходимости в специальной поддержке Visual Studio. В этом прелесть расширяемости поставщика сборки.
Кроме того, в веб-приложениях вы не обнаруживаете ошибки в страницах / элементах управления, поскольку компилятор компилирует только ваши классы codebehind, а не код разметки (в MVC это можно исправить с помощью параметра MvcBuildViews), который компилируется во время выполнения.
Visual Studio
Поскольку веб-приложения являются проектами Visual Studio, вы получаете некоторые функции, недоступные на веб-сайтах. Например, вы можете использовать события сборки для выполнения различных задач, например, минимизации и / или объединения файлов Javascript.
Еще одна приятная функция, представленная в Visual Studio 2010, - это преобразование Web.config .Это также недоступно на веб-сайтах. Теперь работает с веб-сайтами в VS 2013.
Создание веб-приложения происходит быстрее, чем создание веб-сайта, особенно для больших сайтов. Это происходит главным образом потому, что веб-приложения не компилируют код разметки. В MVC, если вы устанавливаете MvcBuildViews в true, он компилирует код разметки, и вы получаете обнаружение ошибок, что очень полезно. Недостатком является то, что каждый раз, когда вы создаете решение, оно создает полный сайт, который может быть медленным и неэффективным, особенно если вы не редактируете сайт. Я обнаружил, что включаю и выключаю MvcBuildViews (что требует разгрузки проекта). С другой стороны, с помощью веб-сайтов вы можете выбрать, хотите ли вы создать сайт как часть решения или нет. Если вы решите не делать этого, то создание решения будет очень быстрым, и вы всегда можете щелкнуть по узлу веб-сайта и выбрать «Построить», если вы внесли изменения.
В проекте веб-приложения MVC у вас есть дополнительные команды и диалоговые окна для общих задач, таких как «Добавить представление», «Перейти к представлению», «Добавить контроллер» и т. Д. Они недоступны на веб-сайте MVC.
Если вы используете IIS Express в качестве сервера разработки, на веб-сайтах вы можете добавлять виртуальные каталоги. Эта опция недоступна в веб-приложениях.
Восстановление пакетов NuGet не работает на веб-сайтах, вам необходимо вручную установить пакеты, перечисленные в packages.configВосстановление пакетов теперь работает с веб- сайтами, запускающими NuGet 2.7