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

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

Примечание

Для некоторых сценариев варианты выбора отсутствуют.Например, если требуется создать MVC-приложение ASP.NET, необходимо использовать проект веб-приложения.

В этом разделе содержатся следующие подразделы.

  • Сценарии

  • Сводная информация по различиям

  • Структура файлов проекта

  • Компиляция

  • Развертывание

Сценарии

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

  • Необходимо иметь возможность изменять код без остановки сеанса отладки.

  • Необходимо выполнять модульные тесты кода, находящегося в файлах классов, связанных со страницами ASP.NET.

  • Требуется ссылаться на классы, связанные со страницами и пользовательскими элементами управления из изолированных классов.

  • Требуется установить зависимости между несколькими веб-проектами.

  • С помощью компилятора требуется создать единую сборку для всего сайта.

  • Требуется управление именем и номером версии сборки, созданной для сайта.

  • Для компиляции проекта необходимо использовать MSBuild или Team Build. Например, может потребоваться добавить этапы перед построением и после него.

  • Необходимо избежать размещения исходного кода на рабочем сервере.

  • Необходимо использовать средства автоматизированного развертывания, доступные в Visual Studio 2010.

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

  • В один веб-проект необходимо включить как код C#, так и код Visual Basic. (По умолчанию веб-приложение компилируется на основании языковых параметров в файле проекта. Исключения возможны, но сопряжены с трудностями.)

  • Необходимо открыть рабочий веб-сайт в Visual Studio и обновить его в режиме реального времени через протокол FTP.

  • Вы не хотите явным образом компилировать проект, чтобы его развернуть.

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

  • Требуется возможность обновления отдельных файлов в рабочей среде путем простого копирования новых версий на рабочий сервер либо путем непосредственного редактирования файлов на рабочем сервере.

  • Если вы выполнили предварительную компиляцию сайта, вам нужна возможность обновлять отдельные веб-страницы ASP.NET (ASPX-файлы), не компилируя заново весь веб-сайт.

  • Вы хотите хранить исходный код на рабочем сервере в качестве дополнительной резервной копии.

Сводная информация по различиям

Сводная информация по основным различиям представлена в следующей таблице.

Область

Проекты веб-приложений

Проекты веб-сайтов

Структура файлов проекта

Файл проекта Visual Studio (с расширением CSPROJ или VBPROJ) хранит сведения о проекте, такие как список файлов, входящих в его состав, а также все ссылки между проектами.

Файл проекта (с расширением VBPROJ или CSPROJ) отсутствует. Все файлы в структуре папок автоматически добавлены в сайт.

Компиляция

  • Исходный код на компьютере, используемом для разработки или системы управления версиями, компилируется явным образом.

  • По умолчанию компиляция файлов кода (за исключением файлов ASPX и ASCX) обеспечивает создание единой сборки.

  • В большинстве случаев ASP.NET компилирует исходный код на сервере динамически (автоматически) при первом получении запроса после установки или обновления сайта.

    Сайт можно предварительно компилировать (заранее скомпилировать на компьютере разработчика или на сервере).

  • По умолчанию при компиляции создается несколько сборок.

Пространства имен

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

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

Развертывание

  • Сборка копируется на сервер. Сборка создается при компиляции приложения.

  • Для автоматизации многих задач развертывания среда разработки Visual Studio предоставляет инструменты, интегрирующиеся с инструментом веб-развертывания IIS.

  • Исходные файлы приложения копируются на компьютер с установленными службами IIS.

  • Если сайт предварительно скомпилирован на компьютере разработчика, сборки, созданные в процессе компиляции, копируются на сервер IIS.

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

Структура файлов проекта

Проекты веб-приложений используют файлы проектов Visual Studio (с расширением CSPROJ или VBPROJ) для отслеживания сведений о проекте. Помимо других задач, это позволяет указать файлы, добавляемые в проект или исключаемые из него, тем самым определяя файлы, компилируемые во время построения.

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

Использование файлов проектов веб-приложений предоставляет следующее преимущество:

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

Использование структуры папок без файлов проектов веб-сайтов предоставляет следующее преимущество:

  • Управлять структурой проекта исключительно в Visual Studio не требуется. Например, можно копировать файлы в проект или удалить их из него с помощью проводника Windows.

Компиляция

Проекты веб-приложений обычно создаются в Visual Studio или с помощью пакетного компилятора ASP.NET на компьютере, не являющимся рабочим сервером IIS. Все файлы классов с выделенным кодом и отдельные файлы классов в проекте компилируются в единую сборку, которая затем помещается в папку Bin проекта веб-приложения. (Файлы ASPX и ASCX динамически компилируются способом, аналогичным процедуре для проектов веб-сайтов.)

Проекты веб-сайтов компилировать вручную не требуется. В большинстве случаев проекты веб-сайтов компилируются динамически с помощью ASP.NET (на компьютере разработчика и рабочем сервере IIS). Можно выбрать режим пакетной компиляции, в котором обычно создается одна сборка для каждой папки, или режим фиксированной компиляции, в котором обычно создается одна сборка для каждой страницы или пользовательского элемента управления.

Модель компиляции для проектов веб-приложений имеет следующие преимущества:

  • Для создания пользовательского процесса пакетной компиляции можно использовать MSBuild.

  • Можно с легкостью указать атрибуты сборки, такие как имя и версия.

  • Предварительная компиляция гарантирует, что пользователям не придется ожидать окончания компиляции сайта на рабочем сервере. (Если размер сайта очень большой, динамическая компиляция проекта веб-сайта может занять длительное время. Динамическая компиляция выполняется, если запрос о ресурсе сайта получен после обновления сайта. Запрос, запускающий компиляцию, может быть отложен до тех пор, пока требуемые ресурсы не будут скомпилированы. Если задержка недопустима, можно выполнить предварительную компиляцию сайта. Однако в этом случае некоторые преимущества динамической компиляции будут утеряны.

  • Пользователь имеет полный контроль над местом размещения файлов кода в структуре папок проекта, а также, каким образом классы в проекте ссылаются друг на друга. (Для динамической компиляции требуется, чтобы исходный код для любых классов, использующихся на сайте, хранился в папке App_Code. Нельзя ссылаться на класс страницы или пользовательского элемента управления из класса в папке App_Code.)

Модель компиляции для проектов веб-сайтов имеет следующие преимущества:

  • Можно тестировать определенные страницы независимо от состояния других страниц. Это обусловлено тем, что для запуска отдельной страницы не требуется успешная компиляция всего сайта, а только страницы и всех компонентов, от которых она зависит, например кода в папке App_Code или файла Global.asax. (В проекте веб-приложения при наличии ошибок компиляции, возникших в любой части сайта, будет невозможно создать сборку и, следовательно, протестировать даже фрагменты компилируемого сайта.)

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

  • В некоторых сценариях предварительная компиляция в несколько сборок может предоставить преимущества в производительности. Наглядным примером является сайт с множеством страниц, содержащих большой объем написанного кода. Большинство страниц запрашивается редко, и только некоторые из них активно используются. Если подобный сайт скомпилировать в несколько сборок, рабочий сервер может загрузить только те сборки, которые требуются для текущих запросов. Если страница не запрашивается, соответствующая сборка не будет загружена.

Примечание

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

Развертывание

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

Стратегия развертывания для проектов веб-приложений имеет следующие преимущества:

  • Можно избежать необходимости развертывания исходного кода на сервере IIS. В некоторых сценариях, например для общих размещающих сред, может возникнуть вопрос о несанкционированном доступе к исходному коду на сервере IIS. (Для проекта веб-сайта избежать подобного риска можно путем предварительной компиляции на компьютере разработчика и развертывания созданных сборок вместо исходного кода. Однако в этом случае будут недоступны некоторые преимущества легкого обновления сайта.)

  • Помимо копирования сборок или кода на сервер, развертывание часто предполагает выполнение других задач. Например, в рабочей среде может требоваться выполнение скриптов базы данных, а для рабочего сервера — изменение строк подключения в файле Web.config. Для автоматизации многих подобных задач Visual Studio предоставляет такие инструменты, как публикация одним щелчком мыши, доступная для проектов веб-приложений. Для проектов веб-сайтов эти инструменты недоступны.

Стратегия развертывания для проектов веб-сайтов имеет следующие преимущества:

  • При внесении незначительных изменений в веб-приложение повторное развертывание всего приложения не требуется. Вместо этого на рабочий сервер IIS можно просто скопировать измененный файл или файлы. Кроме того, можно редактировать файлы непосредственно на рабочем сервере. (Поскольку файлы кода проекта веб-приложения компилируются в файл единой сборки, даже для внесения небольших изменений необходимо развернуть весь сайт, за исключением случая, когда единственное изменение вносится в файл ASPX или ASCX.)

См. также

Основные понятия

Проекты веб-приложений ASP.NET

Построение (компиляция) проектов веб-сайтов

Общие папки кода в веб-проектах ASP.NET

Пошаговое руководство. Преобразование проекта веб-узла в проект веб-приложения в Visual Studio

Карта содержимого развертывания ASP.NET

Другие ресурсы

Веб-проекты ASP.NET

Проекты веб-сайтов ASP.NET

Управление исходным кодом веб-проектов ASP.NET

Web Application Projects vs Web Site Projects