Общие сведения о компиляции в ASP.NET
Обновлен: Ноябрь 2007
Чтобы код приложения обрабатывал запросы пользователей, платформе ASP.NET необходимо вначале скомпилировать код в одну или несколько сборок. Сборки — это файлы с расширением DLL. Код ASP.NET можно писать на самых различных языках, например Visual Basic, C#, J# и других. При компиляции код переводится в независимое от языка и процессора представление, которое называется языком MSIL. Во время работы MSIL выполняется в контексте платформы .NET Framework, которая переводит MSIL в индивидуальные инструкции для процессора компьютера, на котором запущено приложение.
Компиляция кода приложения имеет множество преимуществ, в числе которых:
**Производительность ** Скомпилированный код функционирует гораздо быстрее таких языков сценариев, как ECMAScript или VBScript, поскольку его представление ближе к машинному коду и не требует дополнительного анализа.
**Безопасность **Скомпилированный код гораздо сложнее реконструировать, чем нескомпилированный исходный код, так как он не обладает легкостью чтения и абстрактностью языков высокого уровня. Кроме того, существуют средства запутывания кода, которые делают скомпилированный код еще более устойчивым к реконструированию.
Стабильность Во время компиляции код проверяется на наличие ошибок, строгость типизации и наличие прочих проблем. Обнаружение этих ошибок на этапе построения позволяет исключить множество ошибок в коде.
Взаимодействие Благодаря тому, что код MSIL поддерживает любой язык .NET, можно использовать сборки, которые изначально были написаны в коде на других языках. Например, если веб-страница ASP.NET пишется на языке C#, то можно добавить в нее ссылку на файл DLL, который был написан на языке Visual Basic.
Архитектура компиляции ASP.NET включает в себя целый ряд функций, в числе которых:
поддержка нескольких языков;
автоматическая компиляция;
гибкое развертывание;
расширяемая система построения.
В следующих разделах каждая из этих функций описана более подробно.
Поддержка нескольких языков
В ASP.NET 2.0 можно использовать различные языки, например, Visual Basic и C#, в одном приложении, так как ASP.NET создаст несколько сборок — по одной для каждого языка. Для кода, который хранится в папке App_Code, можно указать отдельную вложенную папку для каждого языка. ♠Дополнительные сведения о папке App_Code см. в разделе Общие папки кода на веб-узлах ASP.NET.
Автоматическая компиляция
ASP.NET автоматически компилирует код приложения и все связанные с ним ресурсы, когда пользователь впервые запрашивает ресурс с веб-узла. В общем случае ASP.NET создает отдельную сборку для каждого каталога приложения (например, App_Code) и одну для основного каталога. (если файлы в каталоге написаны на различных языках программирования, то для каждого языка будет создана отдельная сборка). Какие именно каталоги следует компилировать в единые сборки, можно указать в разделе Compilation файла Web.config.
Гибкое развертывание
Так как ASP.NET компилирует веб-узел при первом запросе пользователя, то можно просто скопировать исходный код приложения на рабочий веб-сервер. Однако ASP.NET также предоставляет возможность предварительной компиляции, которая позволяет скомпилировать веб-узел до его развертывания или скомпилировать его после развертывания, но до прихода запроса от пользователя. Предварительная компиляция имеет несколько преимуществ. Она может повысить производительность веб-узла при первом запросе, так как будут устранены задержки, связанные с компиляцией узла ASP.NET. Предварительная компиляция также помогает находить ошибки, которые в ином случае обнаружились бы только при первом запросе страницы пользователем. Наконец, если произвести предварительную компиляцию веб-узла до его развертывания, то вместо исходного кода можно развертывать сборки.
Предварительную компиляцию веб-узла можно произвести при помощи средства компиляции ASP.NET (ASPNET_Compiler.exe). Это средство предоставляет следующие параметры предварительной компиляции:
Компиляция на месте Данный параметр производит компиляцию, идентичную динамической компиляции. Этот параметр следует использовать для компиляции веб-узлов, уже развернутых на рабочем сервере.
Полная предкомпиляция без возможности обновления Данный параметр следует использовать для компиляции приложения и копирования скомпилированных выходных файлов на рабочий сервер. Весь код приложения, разметка и код интерфейса пользователя компилируется в сборки. Файлы-местозаменители, например, страницы ASPX, все равно будут присутствовать, чтобы можно было выполнять файловые задачи наподобие настройки разрешений, но эти файлы не будут содержать обновляемого кода. Для обновления любой страницы или любого кода необходимо будет произвести предварительную компиляцию и развертывание веб-узла заново.
Предкомпиляция с возможностью обновления Данный параметр похож на необновляемую полную предкомпиляцию, за тем исключением, что элементы пользовательского интерфейса, например, страницы ASPX и элементы управления ASCX, сохраняют всю свою разметку, код пользовательского интерфейса и встроенный код, если таковые в них имеются. Код в файле можно обновить уже после того, как он был развернут. Платформа ASP.NET обнаружит изменения в файле и скомпилирует его заново. Обратите внимание, что код в файлах с выделенным кодом (файл VB или CS) во время предварительной компиляции встраивается в сборки, поэтому его нельзя изменить без повторного проведения предварительной компиляции и развертывания.
Дополнительные сведения см. в разделе Общие сведения о предварительной компиляции в ASP.NET.
Расширяемая система построения
Для построения таких элементов веб-узла, как страницы ASPX, файлы ASCX и глобальные ресурсы, платформа ASP.NET использует классы BuildProvider. Систему построения ASP.NET можно расширить и настроить для компиляции пользовательских ресурсов, создавая классы, которые наследуют от класса BuildProvider. Например, можно добавить новый тип файлов, а затем написать поставщик BuildProvider, который отвечает за построение файлов данного типа.