Веб-сайт ASP.NET или веб-приложение ASP.NET? - PullRequest
818 голосов
/ 29 декабря 2008

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

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

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

Ответы [ 25 ]

536 голосов
/ 29 декабря 2008

Сайт:

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

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

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

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

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

Ссылка

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

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

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

164 голосов
/ 09 марта 2009

Веб-сайт - это то, что вы развертываете на веб-сервере 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, в веб-приложениях вам придется пересобирать каждое небольшое изменение, и вы не можете сделать живые изменения. Во время разработки это может быть серьезной болью, так как вам нужно продолжать сборку, чтобы увидеть изменения, в то время как с веб-сайтами изменения обнаруживаются средой выполнения, а страницы / элементы управления автоматически перекомпилируются.

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

Я не говорю, что развертывание файлов кода - это всегда хорошая идея (особенно не в случае файлов с общим кодом), но файлы со связанными кодами должны содержать только код, который выполняет специфические для пользовательского интерфейса задачи, обработчики событий подключения и т. Д. приложение должно быть многоуровневым, чтобы важный код всегда попадал в папку 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

73 голосов
/ 04 марта 2009

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

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

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

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

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

39 голосов
/ 16 июля 2009

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

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

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

29 голосов
/ 24 января 2009

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

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

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

20 голосов
/ 29 декабря 2008

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

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

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

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

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

19 голосов
/ 07 июля 2011

Из экзамена по самообучению MCTS 70-515 книга:

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

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

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

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

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

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

Веб-сайт:

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

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

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

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

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

14 голосов
/ 24 января 2009

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

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

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

11 голосов
/ 04 апреля 2013

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

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

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

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