Веб-проекты
104ASP.NET --- Основы ASP.NET --- Веб-проекты
Пока что мы рассказали только о том, как можно создавать веб-сайты без каких-либо проектных файлов. Преимуществом беспроектной разработки является то, что она представляет собой простой и прямолинейный процесс. В случае создания беспроектного веб-сайта не нужно развертывать никаких лишних вспомогательных файлов. Вместо этого каждый находящийся в папке веб-сайта файл автоматически считается частью веб-приложения.
Беспроектная разработка продолжает пользоваться популярностью по перечисленным ниже причинам:
Она упрощает сам процесс разработки. Требуется просто скопировать все файлы из каталога веб-сайта на веб-сервер: нет никаких ни проектных, ни отладочных файлов, которых следовало бы избегать.
Она упрощает управление файлами. Для удаления страницы можно просто удалить ассоциируемые с нею файлы с помощью любой предпочитаемой программы управления файлами. Для добавления новой страницы или переноса какой-нибудь страницы из одного веб-сайта в другой понадобится только скопировать ассоциируемые с нею файлы: ни иметь дело с Visual Studio, ни редактировать файл проекта не требуется.
Из-за отсутствия файла проекта, о котором нужно было бы заботиться, в веб-страницы даже авторские коррективы можно вносить другими средствами.
Она упрощает совместную командную работу. Разные люди могут по отдельности работать над разными веб-страницами, и никакие проектные файлы блокировать при этом не требуется.
Она упрощает отладку. В случае, когда создается веб-проект, при изменении даже единственной страницы заново необходимо компилировать все приложение. В случае беспроектной разработки каждая страница компилируется отдельно, причем только тогда, когда запрашивается в первый раз.
Позволяет смешивать языки. Поскольку каждая веб-страница компилируется отдельно, разработчик волен писать код для своих страниц на разных языках. В случае проектной разработки ему для этого придется создавать либо отельные веб-проекты (что усложнит управление), либо отдельные проекты библиотеки классов.
Несмотря на вышесказанное, существует также еще несколько более специфических причин, по которым в определенных сценариях предпочтение может отдаваться применению основанной на проектах разработки или использованию веб-проектов.
Разработка, основанная на проекте
При создании веб-проекта Visual Studio генерирует набор дополнительных файлов, включая пользовательские файлы проекта с расширением .csproj, a также файл решения с расширением .sln. При компоновке приложения Visual Studio генерирует временные файлы, которые размещает в подкаталоге Obj, и один или более .pdb-файлов с отладочными символами, которые размещает в подкаталоге Bin. Ни один из этих файлов не должен развертываться на веб-сервере, когда веб-приложение будет готово.
Более того, также не должны развертываться и файлы исходного кода на C# (с расширением .cs), поскольку Visual Studio предварительно компилирует их в DLL-сборку.
На первый взгляд предварительная компиляция веб-проектов кажется большим преимуществом, ведь она не только гарантирует отсутствие необходимости в компилировании страниц при первом запросе, но и также позволяет избегать развертывания исходного кода на веб-сервере. Однако беспроектные веб-сайты можно так же легко компилировать для развертывания: необходимо всего лишь воспользоваться соответствующим инструментом предварительной компиляции.
У основанной на проектах разработки имеется свой круг почитателей. Ниже перечислены наиболее важные преимущества веб-проектов:
Система проектной разработки является более строгой, чем система беспроектной разработки. Дело в том, что в файле проекта явно перечислены все файлы, которые должны входить в проект. Это позволяет перехватывать вероятные ошибки (вроде недостающих файлов) и даже анализировать возможные варианты атак (вроде добавления злонамеренным пользователем нежелательных файлов).
Веб-проекты предусматривают больше возможностей для управления файлами. Одним из примеров может служить случай, когда создается несколько проектов, и все они размещаются в подкаталогах внутри одного и того же виртуального каталога. При таком сценарии получается, что файлы хранятся отдельно для целей разработки, но при этом по сути все равно являются частью одного и того же приложения для развертывания. В случае беспроектной разработки возможность размещать файлы отдельно в таких подкаталогах отсутствует.
По этой же причине веб-проекты может быть эффективнее применять и при создании веб-приложения, использующего огромное количество файлов ресурсов, например, веб-сайта, включающего подкаталог Images с тысячами различных изображений. При беспроектной разработке Visual Studio обнаружит эти файлы и добавит их в окно Solution Explorer, поскольку они будут являться частью каталога веб-сайта. В случае веб-проекта таких дополнительных накладных расходов удастся избежать, потому что явно добавлять эти рисунки в список файлов проекта вы не будете.
Веб-проекты предусматривают возможность настройки процесса развертывания. Файлы проектов Visual Studio работают со средством веб-пакетов, которое предоставляет дополнительные возможности для конфигурирования развертываемой версии приложения.
Веб-проекты работают лучше в некоторых сценариях миграции. Любое веб-приложение, которое создавалось с помощью Visual Studio 2003 или более ранней версии, представляет собой веб-проект, поскольку в этих версиях Visual Studio не было возможности создавать веб-сайты без использования проектов. Открытие такого веб-проекта в Visual Studio 2010 приводит к запуску мастера миграции для преобразования этого приложения в веб-проект Visual Studio 2010.
Доступные функциональные возможности ASP.NET как при беспроектной, так и при основанной на проектах разработке выглядят одинаково. Более того, показатели производительности и в том, и в другом случае тоже ничем не отличаются. Так какой же вариант лучше выбирать при создании нового веб-сайта ASP.NET? У каждого подхода имеются свои сторонники.
Официально Microsoft рекомендует пользоваться более простой моделью веб-сайта во всех случаях, кроме тех, когда существует серьезная причина применять веб-проект. К числу таких случаев относятся ситуации, когда было разработано специальное расширение MSBuild, когда уже имеется готовый тщательно автоматизированный процесс развертывания, когда выполняется перенос в новую версию старого веб-сайта, созданного в Visual Studio 2003, или когда необходимо создать в одном каталоге сразу несколько проектов.
Создание веб-проекта
Чтобы создать веб-проект, выберите в меню File пункт New --> Project. Откроется диалоговое окно New Project, которое выглядит очень похоже на рассмотренное ранее диалоговое окно New Web Site.
Выберите элемент ASP.NET Web Application (Веб-приложение ASP.NET). Далее нужно указать место размещения, либо в виде пути к файлу, либо в виде URL-адреса, указывающего на локальный или удаленный веб-сервер IIS.
Как и при создании беспроектного веб-сайта, в списке вверху окна можно изменить целевую версию .NET Framework. Хотя веб-проекты и беспроектные веб-сайты дают одинаковый конечный результат после развертывания и компиляции на веб-сервере, есть некоторые отличия в способе, которым они структурируются во время проектирования.
Ниже перечислены эти отличия:
- Компиляция
Как уже объяснялось ранее, при запуске веб-проекты компилируются Visual Studio (а не ASP.NET). Классы веб-страниц объединяются в одну сборку, которая получает то же имя, что и у веб-проекта (например, WebApplication) и затем размещается в папке Bin.
- Отделенный код
Веб-страницы в веб-проекте всегда используют модель отделенного кода. Однако они включают один дополнительный файл с расширением .aspx.designer.cs, в котором содержатся объявления для всех элементов управления вебстраницы. Это означает, что если вы создадите страницу по имени Default.aspx, то получите файл Default.aspx.cs с классом отделенного кода и файл Default.aspx.designer.cs с объявлениями элементов управления:
Во время компиляции эти два файла будут объединены. В беспроектном веб-сайте вы никогда не увидите файла с объявлениями элементов управления, поскольку эта часть кода генерируется во время компиляции системой ASP.NET. (Изменено в VS 2012)
- Директива Page
В веб-страницах веб-проекта директива Page выглядит немного по-другому. Для указания на файл с исходным кодом вместо атрибута CodeFile в ней применяется атрибут CodeBehind. Это отличие тоже связано с тем, что компиляцию осуществляет Visual Studio, а не ASP.NET. Среда ASP.NET проверяет атрибут CodeFile, a Visual Studio — атрибут CodeBehind.
- Ссылки на сборки
В беспроектном веб-сайте все ссылки на сборки фиксируются в файле web.config, так что ASP.NET может использовать их при разрешении ссылок во время компиляции. Но в веб-проекте ссылки на сборки сохраняются в файле проекта, к которому Visual Studio обращается при компиляции кода. Исключением являются только ссылки на сборки System.Core.dll и System.Web.Extensions.dll, в которых содержатся все специфические функции .NET 3.5. Эти ссылки определяются в файле web.config, поскольку включают классы, необходимые для указания новых конфигурационных параметров.