Программа компиляции для ASP.NET (Aspnet_compiler.exe)

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

Примечание

Сведения о поиске соответствующей версии Aspnet_compiler.exe см. в подразделе Поиск подходящей версии Aspnet_compiler.exe далее в этом разделе.

aspnet_compiler  [-?]
                 [-m metabasePath | -v virtualPath [-p physicalPath]]
                 [[-u] [-f] [-d] [-fixednames] targetDir]
                 [-c]
                 [-errorstack]
                 [-nologo]
                 [[-keyfile file | -keycontainer container ] [-aptca] [-delaysign]]

Параметры

Параметр

Описание

-m metabasePath

Задает полный путь к метабазе IIS приложения для компиляции. Метабаза IIS является хранилищем иерархической информации, используемой для конфигурирования IIS. Например, путь метаданных к веб-узлу IIS по умолчанию — LM/W3SVC/1/ROOT.

Данный параметр несовместим с параметрами -v или -p.

-v virtualPath

Задает виртуальный путь к компилируемому приложению.

Если также указан параметр -p, значение сопровождающего параметра physicalPath используется для обнаружения компилируемого приложения. В противном случае используется метабаза IIS, и программа считает, что файлы источника расположены под веб-узлом по умолчанию (указанном в узле метабазы LM/W3SVC/1/ROOT).

Параметр не может использоваться вместе с параметром -m.

-p physicalPath

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

Этот параметр должен быть объединен с параметром -v, и не может использоваться с параметром -m.

-u

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

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

Параметр targetDir должен присутствовать.

При использовании этого параметра блоки кода в ASPX-файлах (то есть код в элементах script или между тегами <% и %>) не компилируются. Таким образом, если в этих блоках кода имеются ошибки компиляции, то сообщение об ошибке появится только во время выполнения, поскольку ASPX-файл полностью компилируется только тогда. Обычно небезопасно использовать этот параметр для сайта, который связан с блоками кода в ASPX-файлах.

-f

Указывает, что программа должна переписать существующие файлы в каталоге targetDir и его подкаталогами.

-d

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

Нельзя использовать параметр -d для компиляции на месте. Такая компиляция выполняет установки конфигурации для параметров отладки.

targetDir

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

-c

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

-errorstack

Указывает, что программа должна включить информацию трассировки стека, если компиляция приложения не удалась.

-keyfile file

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

Этот параметр необходимо использовать совместно с параметром -aptca. Если параметр уже применен к сборке файлов исходного текста, программа Aspnet_compiler.exe вызывает исключение.

-keycontainer container

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

Этот параметр необходимо использовать совместно с параметром -aptca. Если параметр уже применен к сборке файлов исходного текста, программа Aspnet_compiler.exe вызывает исключение.

-aptca

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

Этот параметр необходимо использовать совместно с параметром -keyfile или -keycontainer. Если параметр уже применен к сборке файлов исходного текста, программа Aspnet_compiler.exe вызывает исключение.

-delaysign

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

Этот параметр необходимо использовать совместно с параметром -keyfile или -keycontainer. Если параметр уже применен к сборке файлов исходного текста, программа Aspnet_compiler.exe вызывает исключение.

При использовании параметра -delaysign, код, создаваемый программой Aspnet_compilier.exe, может быть запущен до подписи кода. Необходимо обеспечить защищенность кода от пользователей-злоумышленников, пока не выполнена подпись.

-fixednames

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

Нельзя использовать параметр -fixednames для компиляции на месте; такая компиляция использует установки конфигурации для пакетного режима компиляции.

-nologo

Отменяет вывод уведомления об авторских правах.

-?

Отображает синтаксис команд и параметры программы.

Заметки

Существует две версии средства компиляции ASP.NET:

  • Версия, предоставленная вместе с .NET Framework 2.0. Используйте эту версию для веб-приложений, которые развертываются в пулах приложений, связанных со средой CLR .NET Framework 2.0. Веб-приложения могут предназначаться для .NET Framework 2.0, .NET Framework 3.0 или .NET Framework 3.5.

  • Версия, предоставляемая вместе с .NET Framework 4. Используйте эту версию для веб-приложений, которые развертываются в пулах приложений, связанных со средой CLR .NET Framework 4. Веб-приложения могут предназначаться для .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5 или .NET Framework 4. При использовании этой версии для веб-сайтов, предназначенных для .NET Framework 2.0, .NET Framework 3.0 или .NET Framework 3.5, предоставляются улучшенные отчеты об ошибках по сравнению с версией .NET Framework 2.0.

Дополнительные сведения о разработке, компиляции и развертывании веб-сайтов, предназначенных для конкретных версий платформы .NET Framework, см. в разделах Настройка веб-проектов ASP.NET для нескольких версий .NET Framework и Общие сведения об одновременном выполнении в ASP.NET. Сведения о том, как средство компиляции ASP.NET определяет, для какой версии платформы .NET Framework предназначен веб-сайт, см. в описании свойства BuildManager.TargetFramework.

Программа компиляции для ASP.NET может быть использована двумя способами: для компиляции на месте и для компиляции для развертывания, при которой указывается целевой выходной каталог. Эти сценарии описаны в следующих разделах.

Компилирование приложения на месте

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

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

При предварительном компилировании узла на месте действительно следующее:

  • Узел сохраняет свою структуру файлов и каталогов.

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

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

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

Примечание

Компиляция приложения, содержащего вложенное приложение, не компилирует вложенное приложение.Вложенное приложение должно быть откомпилировано отдельно.

Примечание

При компиляции веб-приложения, содержащего главные страницы, возможен сбой компиляции, если приложение компилируется как обновляемый узел, и происходит конфликт названий.Конфликт может произойти, если имя главной страницы совпадает с именем пространства имен для страницы содержимого, производной от главной страницы.(Отношения наследования могут быть определены атрибутом Inherits директивы @ Page).Чтобы устранить эту проблему, можно либо изменить имя класса главной страницы, либо имя в пространстве имен, либо можно компилировать приложение как необновляемое.

Примечание

Если используется версия .NET Framework 4 этого инструмента для предварительной компиляции веб-сайта и если этот сайт предназначен для предыдущей версии платформы .NET Framework и связан с пулом приложений, предназначенным для среды CLR .NET Framework 2.0, то первый запрос веб-приложения приведет к динамической компиляции этого сайта, как если бы предварительная компиляция не выполнялась.Это происходит потому, что компилятор командной строки выполняет компиляцию во временных папках .NET Framework 4, которые не распознаются средой CLR .NET Framework 2.0.

Компилирование приложения для развертывания.

Можно выполнить компиляцию приложения для развертывания (компиляция в целевое размещение) путем указания параметра targetDir. Параметр targetDir может быть окончательным расположением для веб-приложения, либо компилированное приложение может быть развернуто далее.

Использование параметра -u компилирует приложение таким образом, чтобы можно было изменить определенные файлы в компилированном приложении без его повторной компиляции. Программа Aspnet_compiler.exe различает статические и динамические типы файлов, и обрабатывает их по разному при создании результирующего приложения.

Статические типы файлов — это те, которые не имеют связанного компилятора или поставщика компоновки, например файлы с расширениями CSS, GIF, HTM, HTML, JPG, JS и т.п. Эти файлы просто копируются в целевое размещение, с сохранением относительных положений в структуре каталогов.

Динамические типы файлов — это те, которые имеют связанный компилятор или поставщик компоновки, включая файлы с расширениями для ASP.NET, например ASAX, ASCX, ASHX, ASPX, BROWSER, MASTER и т.п. Программа компиляции для ASP.NET создает сборки на основе этих файлов. Если параметр -u опущен, программа также создает файлы с расширением COMPILED, сопоставляющие исходные файлы сборке. Чтобы обеспечить сохранение структуры каталогов источника приложения, программа создает файлы-местозаполнители в соответствующих расположениях в целевом приложении.

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

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

Тип файла

Действие компилятора

ASCX, ASPX, MASTER

Эти файлы разделяются на разметку и исходный код, содержащие файлы кода программной части. Исходный файл компилируется в сборки, имена которых получены с помощью алгоритма хэширования, и сборки размещаются в каталоге Bin. Любой встроенный код, т.е. код, заключенный в элементы <script runat="server"> относится к разметке и не компилируется. Новые файлы с тем же именем, что и исходные файлы, создаются для содержания разметки и помещаются в соответствующие выходные каталоги.

ASHX, ASMX

Эти файлы не компилируются и перемещаются в выходные каталоги "как есть", без компиляции. Если требуется компилировать код обработки, поместите его в файлы исходного кода в каталоге App_Code.

CS, VB, JSL, CPP

(за исключением файлов кода программной части для типов для типов файлов, приведенных выше)

Эти файлы компилируются и включаются в качестве ресурсов в сборки, которые на них ссылаются. Исходные файлы не копируются в выходной каталог. Если на файл кода нет ссылки, он не компилируется.

Пользовательские типы файлов

Эти файлы не компилируются. Эти файлы копируются в соответствующие выходные каталоги.

Файлы исходного кода в подкаталоге App_Code.

Эти файлы компилируются в сборки и размещаются в каталог Bin.

ПримечаниеПримечание
Статические типы файлов в каталоге App_Code не копируются в выходные каталоги.

Файлы с расширениями RESX и RESOURCE в подкаталоге App_GlobalResources

Эти файлы компилируются в сборки и размещаются в каталог Bin. Подкаталог App_GlobalResources не создается в главном выходном каталоге, и файлы с расширениями RESX и RESOURCES из исходного каталога не копируются в выходные каталоги.

ПримечаниеПримечание
Файлы ресурсов в подкаталоге App_GlobalResources компилируются в сборки до компиляции кода в подкаталоге App_Code.Модификация файлов ресурсов после компиляции не поддерживается.

Файлы с расширениями RESX и RESOURCE в подкаталоге App_LocalResources

Эти файлы не компилируются и копируются в соответствующие выходные каталоги.

Файлы с разрешением SKIN в подкаталоге App_Themes

Файлы с расширением SKIN и статические файлы тем не компилируются и копируются в соответствующие выходные каталоги.

BROWSER

Web.config

Статические типы файлов

Сборки уже существуют в каталоге Bin

Эти файлы копируются "как есть" в выходные каталоги.

В следующей таблице описывается обработка различных типов файлов программой компиляции для ASP.NET, если параметр -u опущен.

Примечание

Не подается никаких предупреждений, предотвращающих изменения исходного кода скомпилированного приложения.

Тип файла

Действие компилятора

ASPX, ASMX, ASHX, MASTER

Эти файлы разделены на разметку и исходный код, содержащие файлы кода программной части и любой код, заключенный в элементы <script runat="server">. Исходный файл компилируется в сборки, имена которых получены с помощью алгоритма хэширования. Полученные сборки размещаются в каталоге Bin. Любой встроенный код, т.е. код, заключенный в скобки <% и %>, относится к разметке и не компилируется. Компилятор создает новые файлы для содержания разметки с тем же именем, что и исходные файлы. Полученные файлы размещаются в каталоге Bin. Компилятор также создает файлы с тем же именем, что и исходные файлы, но с расширением COMPILED, содержащие данные сопоставления. Файлы с расширением COMPILED размещаются в выходные каталоги, соответствующие расположениям исходных файлов.

ASCX

Эти файлы разделяются на разметку и исходный код. Исходный код компилируется в сборки и размещается в каталоге Bin, с именами, полученные с помощью алгоритма хэширования. Файлы разметки не создаются.

CS, VB, JSL, CPP

(за исключением файлов кода программной части для типов для типов файлов, приведенных выше)

Исходный код, на который ссылаются сборки, созданные на основе файлов ASCX, ASHX, или ASPX компилируется в сборки и размещается в каталоге Bin. Исходные файлы не копируются.

Пользовательские типы файлов

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

Файлы в подкаталоге App_Code

Файлы исходного кода в данном подкаталоге компилируются в сборки и размещаются в подкаталоге Bin.

ПримечаниеПримечание
Статические типы файлов в каталоге App_Code не копируются в выходные каталоги.

Файлы в подкаталоге App_GlobalResources

Эти файлы компилируются в сборки и размещаются в каталог Bin. В главном выходном каталоге подкаталог App_GlobalResources не создается. Если файлы конфигурации задают appliesTo="All", файлы с расширением RESX и RESOURCES копируются в выходные каталоги. Они не копируются, если на них существуют ссылки BuildProvider.

Файлы с расширениями RESX и RESOURCE в подкаталоге App_LocalResources

Эти файлы компилируются в сборки с уникальными именами и размещаются в каталог Bin. Файлы с расширениями RESX или RESOURCE не копируются в выходные каталоги.

Файлы с разрешением SKIN в подкаталоге App_Themes

Темы компилируются в сборки и размещаются в каталог Bin. Файлы-заглушки создаются для файлов с расширением SKIN и помещаются в соответствующий выходной каталог. Статистические файлы (такие как .css) копируются в выходные каталоги.

BROWSER

Web.config

Статические типы файлов

Сборки уже существуют в каталоге Bin

Эти файлы копируются "как есть" в выходной каталог.

Фиксированные имена сборок

Некоторые сценарии, например развертывание веб-приложения с помощью установщика Windows, требуют использования согласованных имен файлов и содержимого, а также согласованных структур каталогов для указания сборок или установок конфигурация для обновлений. В таких случаях можно использовать параметр -fixednames для указания программе компиляции для ASP.NET, что требуется компилировать сборку для каждого исходного файла, вместо использования режима компилирования нескольких страниц в сборки. Это может привести к большому количеству сборок, поэтому, если важна масштабируемость, этот параметр следует использовать с осторожностью.

Компиляция со строгим именем

Параметры -aptca, -delaysign, -keycontainer и -keyfile предоставлены для того, чтобы можно было использовать программу Aspnet_compiler.exe для создания сборок со строгими именами без использования программы Sn.exe (средство строгих имен) отдельно. Эти параметры соответствуют AllowPartiallyTrustedCallersAttribute, AssemblyDelaySignAttribute, AssemblyKeyNameAttribute и AssemblyKeyFileAttribute соответственно. Т.к. каждый параметр применяет соответствующий атрибут к компилируемой сборке, и так как параметры помечены атрибутом AttributeUsageAttribute, свойство AllowMultiple которого установлено на значение false, использование этих ключей в исходном коде, который уже был помечен одним из этих атрибутов, приводит к сбою компиляции.

Связанные классы ASP.NET

Некоторые классы в пространстве имен System.Web.Compilation позволяют коду получать доступ или вызывать программу Aspnet_compiler.exe вне среды IIS. Класс ClientBuildManager предоставляет PrecompileApplication метод для компиляции приложения. Класс ClientBuildManager также работает с классом ClientBuildManagerParameter позволяющим указать PrecompilationFlags, соответствующий параметрам, используемым данной программой, и аналогично указать ключи строгого имени.

Примеры

Следующая команда компилирует приложение WebApplication1 на месте:

Aspnet_compiler -v /WebApplication1

Следующая команда компилирует приложение WebApplication1 на месте, и программа добавляет данные трассировки стека, если требуется сообщить об ошибке.

Aspnet_compiler -v /WebApplication1 -errorstack

Следующая команда компилирует приложение WebApplication1 для развертывания, используя физический путь каталога. Она также добавляет два атрибута в выводимые сборки. Она использует параметр -keyfile для добавления атрибута AssemblyKeyFileAttribute, который указывает, что файл Key.sn, содержащий данные пары открытый/закрытый ключ, который программа должна использовать для предоставления строгих имен для создаваемых сборок. Команда также использует параметр -aptca для добавления атрибута AllowPartiallyTrustedCallersAttribute в создаваемые сборки. Скомпилированное веб-приложение создается в каталоге c:\applicationTarget.

Aspnet_compiler -v /WebApplication1 -p "c:\Documents and Settings\Default\My Documents\MyWebApplications\WebApplication1" -keyfile "c:\Documents and Settings\Default\My Documents\Key.sn" -aptca c:\applicationTarget

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

Aspnet_compiler -m /LM/W3SVC/1/ROOT/WebService2 -f c:\InetPub\wwwroot\SampleWebService

Поиск подходящей версии Aspnet_compiler.exe

Средство Aspnet_compiler.exe устанавливается в каталог Microsoft .NET Framework. Если на компьютере одновременно работает несколько версий .NET Framework, можно установить несколько версий программы. В следующей таблице перечислены расположения, в которых устанавливается эта программа для различных версий .NET Framework.

Версия платформы .NET Framework

Расположение файла Aspnet_compiler.exe

.NET Framework версии 2.0, версии 3.0 и версии 3.5 (32-разрядные системы)

%windir%\Microsoft.NET\Framework\v2.0.50727

.NET Framework версии 2.0, версии 3.0 и версии 3.5 (64-разрядные системы)

%windir%\Microsoft.NET\Framework64\v2.0.50727

Платформа .NET Framework версии 4 (32-разрядные системы)

%windir%\Microsoft.NET\Framework\v4.0.30319

Платформа .NET Framework версии 4 (64-разрядные системы)

%windir%\Microsoft.NET\Framework64\v4.0.30319

См. также

Ссылки

AssemblyKeyFileAttribute

AssemblyKeyNameAttribute

AssemblyDelaySignAttribute

AllowPartiallyTrustedCallersAttribute

Sn.exe (средство строгих имен)

Программа регистрации IIS для ASP.NET (Aspnet_regiis.exe)

BuildManager.TargetFramework

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

Отложенная подпись сборки

Сборки со строгими именами

Настройка веб-проектов ASP.NET для нескольких версий .NET Framework

Общие сведения об одновременном выполнении в ASP.NET

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

Инструменты .NET Framework