Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Visual Studio предлагает ASP.NET разработчиков двух типов проектов: проекты веб-приложений (WAPs) и проекты веб-сайтов (WSPs). Одним из ключевых различий между двумя типами проектов является то, что в WAP код должен быть явно скомпилирован до развертывания, тогда как в WSP код может автоматически компилироваться на веб-сервере. Однако перед развертыванием можно предварительно скомпилировать WSP. В этом руководстве рассматриваются преимущества предварительной компиляции и показано, как предварительно компилировать веб-сайт из Visual Studio и из командной строки.
Введение
Visual Studio предлагает ASP.NET разработчиков двух различных типов проектов: проекты веб-приложений (WAP) и проекты веб-сайтов (WSP). Одним из ключевых различий между этими типами проектов является то, что WAP требуют явной компиляции , а WSPS используют автоматическую компиляцию по умолчанию. При использовании WAPs код веб-приложения компилируется в одну сборку, которая создается в папке веб-сайта Bin . Развертывание влечет за собой копирование содержимого разметки ( .aspx.ascxи .master файлов) в проекте вместе с сборкой в Bin папке; сами файлы классов программной части не нужно развертывать. С другой стороны, вы развертываете пакеты решений Web (WSP), копируя как страницы разметки, так и соответствующие им классы кода в производственную среду. Классы code-behind компилируются по мере необходимости на веб-сервере.
Замечание
Вернитесь к разделу "Явная компиляция и автоматическая компиляция" в руководстве по определению того, какие файлы необходимо развернуть, чтобы получить дополнительные сведения о различиях между моделями проекта, явной и автоматической компиляцией, а также о том, как модель компиляции влияет на развертывание.
Параметр автоматической компиляции прост в использовании. Для этого нет явного шага компиляции, и нужно развертывать только те файлы, которые были изменены, тогда как явная компиляция требует развертывания изменённых страниц разметки и только что скомпилированной сборки. Однако автоматическое развертывание имеет два потенциальных недостатка:
- Так как страницы должны быть автоматически скомпилированы при первом посещении, может быть короткая, но заметное задержка при первом запросе страницы ASP.NET после развертывания.
- Автоматическая компиляция требует, чтобы декларативная разметка и исходный код присутствовали на веб-сервере. Это может быть непривлекательным вариантом, если вы планируете продавать веб-приложение клиентам, которые будут устанавливать его на своих веб-серверах.
Если один из двух указанных выше недостатков является решающим фактором, можно либо перейти к модели WAP, либо скомпилировать WSP перед развертыванием. В этом руководстве рассматриваются варианты предварительной компиляции, которые лучше всего подходят для размещенного веб-сайта и рассматриваются процесс предварительной компиляции и развертывание предварительно скомпилированного веб-сайта.
Обзор создания и компиляции кода ASP.NET
Прежде чем ознакомиться с доступными параметрами предварительной компиляции, сначала поговорим о создании кода и компиляции, которая возникает при первом запросе страницы ASP.NET с момента его создания или последнего обновления. Как известно, ASP.NET страницы состоят из двух частей: декларативной разметки в .aspx файле; и части исходного кода, обычно в отдельном файле класса программной части (.aspx.vb). Действия, выполняемые средой выполнения при запросе страницы ASP.NET, зависят от модели компиляции приложения.
При использовании WAPs исходный код страниц должен быть явно скомпилирован в одну сборку перед развертыванием. Во время развертывания эта сборка и различные страницы разметки копируются в производственную среду. Когда запрос поступает на веб-сервер для страницы ASP.NET, среда выполнения создает экземпляр класса кода страницы и вызывает его ProcessRequest метод, который запускает жизненный цикл страницы и, в конечном счете, создает содержимое страницы, которое возвращается запросу. Среда выполнения может работать с классом кода ASP.NET страницы, так как класс программной части уже скомпилирован в сборку до развертывания.
При использовании WSPs и автоматической компиляции до развертывания нет явного шага компиляции. Вместо этого развертывание включает копирование декларативного и содержимого исходного кода в рабочую среду. Когда запрос поступает на веб-сервер для страницы ASP.NET в первый раз после создания или последнего обновления страницы, среда выполнения должна сначала скомпилировать класс программной части в сборку. Эта скомпилированная сборка сохраняется в папке %WINDIR%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files, хотя расположение этой папки можно настроить с элементом <pages> в Web.config. Так как сборка сохраняется на диске, ее не нужно перекомпилировать при последующих запросах на ту же страницу.
Замечание
Как ожидается, при первом запросе страницы (или в первый раз после изменения) на сайте, использующем автоматическую компиляцию, возникает небольшая задержка при компиляции кода страницы и сохранении результирующей сборки на диск.
Короче говоря, при явной компиляции необходимо скомпилировать исходный код веб-сайта перед развертыванием, сохранив среду выполнения от необходимости выполнить этот шаг. При автоматической компиляции среда выполнения обрабатывает компиляцию исходного кода страниц, но с небольшой стоимостью инициализации для первого посещения страницы с момента его создания или последнего обновления.
Но как насчет декларативной части страниц ASP.NET ( .aspx файл)? Очевидно, что между файлами .aspx и их кодовыми классами (code-behind) существует связь, так как веб-элементы управления, определенные в декларативной разметке, доступны в коде. Также очевидно, что содержимое в .aspx файлах значительно влияет на отрисованную разметку, созданную страницей. Так как среда выполнения работает с синтаксисом текста, HTML и веб-элемента управления, определенным в .aspx файле, чтобы создать отображаемое содержимое запрошенной страницы?
Я не хочу слишком углубляться в детали реализации низкого уровня, которые различаются между WAPs и WSPs, но вкратце среда выполнения автоматически создает файл класса, содержащий различные веб-элементы управления в виде защищённых членов и методов. Этот сгенерированный файл реализуется как частичный класс для соответствующего класса code-behind. (Частичные классы позволяют распределять содержимое одного класса по нескольким файлам.) Таким образом, класс code-behind определен в двух местах: в .aspx.vb созданном файле и в этом автоматическом классе, созданном средой выполнения. Этот автоматически созданный класс хранится в папке %WINDIR%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files .
Важно понимать, что для того чтобы страница ASP.NET была обработана средой выполнения, как её декларативная часть, так и исходный код должны быть скомпилированы в сборку. При использовании WAPs исходный код явно компилируется в сборку до развертывания, но декларативная разметка по-прежнему должна быть преобразована в код и компилируется средой выполнения на веб-сервере. При использовании WSPS с помощью автоматической компиляции исходный код и декларативная разметка должны компилироваться веб-сервером.
Можно использовать явную компиляцию с моделью WSP. Вы можете явно скомпилировать часть исходного кода, как в модели WAP. Кроме того, можно скомпилировать декларативную разметку.
Параметры предварительной компиляции
Платформа .NET Framework поставляется с инструментом компиляции ASP.NET ,aspnet_compiler.exeкоторый позволяет компилировать исходный код (и даже содержимое) приложения ASP.NET, созданного с помощью модели WSP. Это средство было выпущено с .NET Framework версии 2.0 и находится в папке %WINDIR%\Microsoft.NET\Framework\v2.0.50727. Его можно использовать из командной строки или запускать из Visual Studio через параметр "Опубликовать веб-сайт" в меню "Сборка".
Средство компиляции предоставляет две общие формы компиляции: предварительная компиляция на месте и предварительная компиляция для развертывания. Запустите средство aspnet_compiler.exe из командной строки для предварительной компиляции и укажите путь к виртуальному каталогу или физическому пути веб-сайта, который находится на вашем компьютере. Затем средство компиляции компилирует каждую страницу ASP.NET в проекте, сохраняя скомпилированную версию в %WINDIR%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files папке так же, как если страницы были посетили впервые из браузера. Предварительная компиляция на месте может ускорить первый запрос, сделанный на только что развернутые ASP.NET страницы на сайте, так как это упрощает среду выполнения, необходимую для выполнения этого шага. Однако предварительная компиляция на месте не полезна для большинства размещенных веб-сайтов, так как требуется, чтобы вы могли запускать программы из командной строки веб-сервера. В общих средах размещения этот уровень доступа не разрешен.
Замечание
Дополнительные сведения о предварительной компиляции на месте см. в Практическое руководство: Предварительная компиляция ASP.NET веб-сайта и о предварительной компиляции в ASP.NET 2.0.
Вместо компиляции страниц веб-сайта в папку Temporary ASP.NET Files, предварительная компиляция для развертывания компилирует страницы в указанный вами каталог и в формате, который можно развернуть в производственной среде.
Существует два варианта предварительной компиляции для развертывания, которые мы рассмотрим в этом руководстве: предварительную компиляцию с обновляемым пользовательским интерфейсом и предварительной компиляцией с не обновляемым пользовательским интерфейсом. Предварительная компиляция с обновляемым пользовательским интерфейсом оставляет декларативную разметку в .aspxфайлах и .ascx.masterфайлах, тем самым позволяя разработчику просматривать и при необходимости изменять декларативную разметку на рабочем сервере. Предварительная компиляция с неизменяемым пользовательским интерфейсом создаёт .aspx страницы без содержимого и удаляет файлы .ascx и .master, тем самым скрывая декларативную разметку и запрещая разработчику изменять её из производственной среды.
Предварительная компиляция для развертывания с обновляемым пользовательским интерфейсом
Лучший способ понять предварительную компиляцию для развертывания — увидеть пример в действии. Давайте скомпилируем WSP обзоров книг для предварительного развертывания с обновляемым пользовательским интерфейсом. Средство компиляции ASP.NET можно вызвать из меню сборки Visual Studio или из командной строки. В этом разделе рассматривается использование средства из Visual Studio; В разделе "Предварительная компиляция из командной строки" рассматривается запуск средства компилятора из командной строки.
Откройте WSP проверки книги в Visual Studio, затем перейдите в меню сборки и выберите пункт «Опубликовать веб-сайт». Откроется диалоговое окно "Публикация веб-сайта" (см. рис. 1), где можно указать целевое расположение, и указать, можно ли обновлять предварительно скомпилированный пользовательский интерфейс сайта, а также другие параметры средства компилятора. Целевое расположение может быть удаленным веб-сервером или FTP-сервером, но теперь выберите папку на жестком диске компьютера. Так как мы хотим предварительно компилировать сайт с обновляемым пользовательским интерфейсом, установите флажок "Разрешить этот предварительно скомпилированный сайт быть обновляемым" и нажмите кнопку "ОК".
Рис. 1. Средство компиляции ASP.NET предварительно компилует веб-сайт в указанное целевое расположение.
(Щелкните, чтобы просмотреть изображение полного размера)
Замечание
Параметр "Опубликовать веб-сайт" в меню "Сборка" недоступен в Visual Web Developer. Если вы используете Visual Web Developer, вам потребуется использовать версию командной строки средства компиляции ASP.NET, которая рассматривается в разделе "Предварительная компиляция из командной строки".
После предварительной компиляции веб-сайта перейдите к целевому расположению, которое вы ввели в диалоговом окне "Публикация веб-сайта". Сравните содержимое этой папки с содержимым веб-сайта.
На рисунке 2 показана папка веб-сайта "Отзывы книг". Обратите внимание, что он содержит оба .aspx файла и .aspx.cs файлы. Кроме того, обратите внимание, что Bin каталог содержит только один файл, Elmah.dllкоторый мы добавили в предыдущем руководстве.
Рис. 2. Каталог проекта содержит .aspx и .aspx.cs файлы; Bin папка содержит только Elmah.dll
(Щелкните, чтобы просмотреть изображение полного размера)
На рисунке 3 показана целевая папка расположения, содержимое которой было создано средством компиляции ASP.NET. Эта папка не содержит файлов программной части. Кроме того, каталог этой папки Bin включает несколько сборок и два .compiled файла в дополнение к сборке Elmah.dll .
Рис. 3. Папка целевого расположения содержит файлы для развертывания
(Щелкните, чтобы просмотреть изображение полного размера)
В отличие от эксплицитной компиляции в проектах веб-приложений, предварительная компиляция в процессе развертывания не создает одну сборку для всего сайта. В процессе он объединяет несколько страниц в каждую сборку. Он также компилирует Global.asax файл (если он присутствует) в собственную сборку, а также любые классы в папке App_Code . Файлы, которые содержат декларативную разметку для веб-страниц ASP.NET, элементов управления пользователем и главных страниц (.aspx, .ascxи .master файлов соответственно), копируются as-is в целевой каталог расположения. Аналогичным образом Web.config файл копируется непосредственно, вместе с любыми статическими файлами, такими как изображения, классы CSS и PDF-файлы. Более формальное описание того, как средство компиляции обрабатывает различные типы файлов, см. в разделе "Обработка файлов во время предварительной компиляции ASP.NET".
Замечание
Вы можете указать средству компиляции создать одну сборку для каждой страницы ASP.NET, элемента управления пользователем или главной страницы, установив флажок "Используемые фиксированные имена и сборки одной страницы" в диалоговом окне "Публикация веб-сайта". Наличие каждой ASP.NET страницы, скомпилированной в собственную сборку, позволяет более точно контролировать развертывание. Например, если вы обновили одну веб-страницу ASP.NET и нужно развернуть это изменение, необходимо развернуть только файл этой страницы .aspx и связанную сборку в рабочую среду. Дополнительные сведения см. в руководстве по созданию фиксированных имен с помощью средства компиляции ASP.NET .
Каталог целевого расположения также содержит файл, который не был частью предварительно скомпилированного веб-проекта, а именно PrecompiledApp.config. Этот файл сообщает среде выполнения ASP.NET, что приложение было предварительно компилировано и было ли это сделано с обновляемым или необновляемым пользовательским интерфейсом.
Наконец, откройте один из .aspx файлов в целевом расположении с помощью Visual Studio или текстового редактора. При предварительной компиляции для развертывания с обновляемым пользовательским интерфейсом страницы ASP.NET в каталоге целевого расположения содержат ту же разметку, что и соответствующие файлы на веб-сайте.
Предварительная компиляция для развертывания с использованием пользовательского интерфейса, не обновляемого
Средство компилятора ASP.NET также можно использовать для предварительной компиляции сайта для развертывания с не обновляемым пользовательским интерфейсом. Предварительная компиляция сайта с неизменяемым пользовательским интерфейсом работает так же, как предварительная компиляция с обновляемым пользовательским интерфейсом, ключевым отличием является то, что ASP.NET страницы, элементы управления пользователем и главные страницы в целевом каталоге удаляются из разметки. Чтобы предварительно компилировать веб-сайт для развертывания с не обновляемым пользовательским интерфейсом, выберите параметр "Опубликовать веб-сайт" в меню "Сборка", но снимите флажок "Разрешить обновление этого предварительно созданного сайта" (см. рис. 4).
Рис. 4. Снимите флажок "Разрешить обновление этого предварительно созданного сайта", чтобы выполнить предварительную компиляцию без возможности обновления пользовательского интерфейса.
(Щелкните, чтобы просмотреть изображение полного размера)
На рисунке 5 показана папка целевого расположения после предварительной компиляции с не обновляемым пользовательским интерфейсом.
Рис. 5. Папка целевого местоположения для развертывания с необновляемым пользовательским интерфейсом
(Щелкните, чтобы просмотреть изображение полного размера)
Сравните рис. 3 с рис . 5. Хотя две папки могут выглядеть одинаково, обратите внимание, что не обновляемая папка пользовательского интерфейса не имеет главной страницы Site.master. И хотя рис. 5 содержит различные страницы ASP.NET, если вы просматриваете содержимое этих файлов, вы увидите, что они были лишены декларативной разметки и заменены текстом заполнителя: "Это файл маркера, созданный средством предварительной компиляции, и не должен быть удален!"
Рис. 5. Декларативная разметка удалена из страниц ASP.NET
Папки Bin в рис. 3 и 5 отличаются значительно. В дополнение к сборкам Bin папка на рис. 5 содержит .compiled файл для каждой страницы ASP.NET, пользовательского элемента управления и главной страницы.
Предварительная компиляция сайта с неподлежащим обновлению пользовательским интерфейсом полезна в ситуациях, когда вы хотите, чтобы содержимое страниц ASP.NET не изменялось пользователем или компанией, которая устанавливает или управляет веб-сайтом в рабочей среде. Если вы создаете веб-приложение ASP.NET, которое продаете клиентам для установки на их собственных веб-серверах, вы можете убедиться, что они не изменяют внешний вид и функциональность вашего сайта, не редактируя непосредственно страницы .aspx, которые вы им отправляете. Предварительно компилируя веб-сайт с не обновляемым пользовательским интерфейсом, вы отправляете страницы заполнителей .aspx как часть установки, тем самым не позволяя клиентам изучать или изменять их содержимое.
Предварительная компиляция из командной строки
В диалоговом окне публикации веб-сайта Visual Studio вызывается средство компиляции ASP.NET (aspnet_compiler.exe) для предварительной компиляции веб-сайта. Кроме того, можно вызвать это средство из командной строки. На самом деле, если вы используете Visual Web Developer, вам потребуется запустить средство компилятора из командной строки, так как меню сборки Visual Web Developer не включает параметр "Опубликовать веб-сайт".
Чтобы использовать средство компилятора из командной строки, сначала перейдите в командную строку и перейдите к каталогу платформы %WINDIR%\Microsoft.NET\Framework\v2.0.50727. Затем введите следующую инструкцию в командную строку:
aspnet_compiler -p "physical_path_to_app" -v / -f -u "target_location_folder"
Приведенная выше команда запускает средство компилятора ASP.NET (aspnet_compiler.exe) и, используя ключ -p, указывает ему предварительно компилировать веб-сайт, находящийся в корне physical_path_to_app; это значение будет вроде C:\MySites\BookReviews и должно быть заключено в кавычки.
Параметр -v указывает виртуальный каталог сайта. Если сайт зарегистрирован как веб-сайт по умолчанию в метабазе IIS, можно опустить -p переключатель и просто указать виртуальный каталог приложения. Если вы используете -p параметр, значение, следующее за -v, указывает корень веб-сайта и используется для разрешения корневых ссылок приложения. Например, если указать значение -v /MySite, то ссылки в приложении на ~/path/file будут разрешены как ~/MySite/path/file. Так как сайт отзывов книг находится в корневом каталоге в моей компании веб-хостинга я использовал переключатель -v /.
При -f наличии переключатель указывает средству компиляции перезаписать каталог target_location_folder , если он уже существует. Если вы не используете -f ключ и папка целевого расположения уже существует, инструмент компиляции завершит работу с ошибкой: "Ошибка ASPRUNTIME: целевой каталог не пуст." Удалите его вручную или выберите другой целевой объект.
Параметр -u, если он присутствует, сообщает инструменту, что нужно создать пользовательский интерфейс, подлежащий обновлению. Опустить этот параметр, чтобы предварительно компилировать сайт с не обновляемым пользовательским интерфейсом.
Наконец, target_location_folder — это физический путь к целевому каталогу расположения; это значение будет наподобие C:\MySites\Output\BookReviews и должно быть заключено в кавычки.
Развертывание предварительно скомпилированного веб-сайта
На этом этапе мы видели, как использовать средство компиляции ASP.NET для предварительной компиляции веб-сайта с помощью обновляемых и не обновляемых параметров пользовательского интерфейса. Однако наши примеры до сих пор предварительно компилировали веб-сайт в локальную папку, а не в рабочую среду. Хорошая новость заключается в том, что развертывание предварительно скомпилированного веб-сайта является очень простым и может выполняться с помощью Visual Studio или другого механизма копирования файлов, например, с помощью автономного FTP-клиента.
В диалоговом окне "Публикация веб-сайта" (на рисунке 1) есть параметр целевого расположения, который указывает, где копируются предварительно скомпилированные файлы веб-сайта. Это расположение может быть удаленным веб-сервером или FTP-сервером. При вводе удаленного сервера в это текстовое поле происходит предварительная компиляция и развертывание веб-сайта на указанном сервере в один шаг. Кроме того, можно предварительно скомпилировать веб-сайт в локальную папку, а затем вручную скопировать содержимое этой папки в рабочую среду с помощью FTP или другого подхода.
Автоматическое развертывание веб-сайта с помощью диалогового окна "Публикация веб-сайта" Visual Studio полезно для простых сайтов, в которых нет различий в конфигурации между средами разработки и продуктивной среды. Однако, как отмечалось в руководстве по общим различиям конфигурации между разработкой и рабочей средой, это не редкость для существования таких различий. Например, веб-приложение "Обзоры книг" использует другую базу данных в рабочей среде, чем в среде разработки. Когда Visual Studio публикует веб-сайт на удаленном сервере, он слепо копирует сведения о файле конфигурации в среде разработки.
Для сайтов с различиями конфигурации между средами разработки и рабочей среды рекомендуется предварительно компилировать сайт в локальный каталог, скопировать файлы конфигурации для конкретной среды, а затем скопировать содержимое предварительно скомпилированных выходных данных в рабочую среду.
Для обновления памяти о копировании файлов из среды разработки в рабочую среду обратитесь к руководству по развертыванию веб-сайта с помощью FTP-клиента и руководству по развертыванию веб-сайта с помощью Visual Studio.
Сводка
ASP.NET поддерживает два режима компиляции: автоматический и явный. Как описано в предыдущих руководствах, проекты веб-приложений (WAPs) используют явную компиляцию, в то время как проекты веб-сайта (WSPs) используют автоматическую компиляцию по умолчанию. Однако можно явно скомпилировать WSP до развертывания с помощью средства компиляции ASP.NET.
Это руководство посвящено предварительной компиляции средства компиляции для поддержки развертывания. При предварительной компиляции для развертывания средство компиляции создает целевую папку расположения, компилирует исходный код указанного веб-приложения и копирует эти скомпилированные сборки и файлы содержимого в целевую папку расположения. Средство компиляции можно настроить для создания обновляемого или не обновляемого пользовательского интерфейса. При предварительной компиляции с параметром пользовательского интерфейса без обновления декларативная разметка в файлах содержимого удаляется. Короче говоря, предварительная компиляция позволяет развертывать ваше приложение на основе веб-проекта без включения файлов исходного кода и, при необходимости, без декларативной разметки.
Счастливое программирование!
Дальнейшее чтение
Дополнительные сведения о разделах, описанных в этом руководстве, см. в следующих ресурсах:
- предварительная компиляция веб-сайта ASP.NET
- Codebehind и компиляция в ASP.NET 2.0
- Предварительная компиляция в ASP.NET
- Параметры предварительно скомпилированного сайта в ASP.NET
ПредыдущаяСледующая версия/aspnet/bb398860(v=vs.100)