2013-08-28 5 views
2

Как Visual Studio обрабатывает папку App_Code при внесении или обнаружении изменений? Не IIS или ASP.NET.Как Visual Studio обрабатывает папку App_Code специально?

Я хочу получить лучшее представление о том, почему Visual Studio замерзает в течение длительного периода времени, когда я сохраняю файл кода внутри большой папки App_Code проекта веб-сайта. В качестве альтернативы, я мог бы спросить: почему Visual Studio не обнаруживает эти же зависания при обработке файла внутри библиотеки классов, которая одинаково велика?

В идеале я хотел бы, чтобы официальная документация, цитируемая Microsoft, касалась обработки папки App_Code в Visual Studio, и что происходит, которая отличается от обработки библиотеки классов, например.

ответ

5

Папка App_Code явно не помечена как содержащая файлы , написанная на любом языке программирования. Вместо этого ASP.NET сообщает , какой компилятор должен вызвать для папки App_Code на основе файлов, которые он содержит . Если в папке App_Code содержатся файлы .vb, ASP.NET использует компилятор Visual Basic ; если он содержит файлы .cs, ASP.NET использует компилятор C# и так далее.

Если папка App_Code содержит только файлы, в которых программирование язык является неоднозначным, такие как .wsdl файл, ASP.NET использует по умолчанию компилятор для веб-приложений на, как установлено в сборник элемент Web-приложений. файл конфигурации или файл файла машинного уровня. Компиляторы называются поставщиками сборки, а поставщик строится для каждого расширения файла в расширении . элемент.

См. Здесь documentation.

+1

Это полезный ответ. Таким образом, папка App_Code динамически компилируется различными способами при небольших изменениях, что приводит к различиям в производительности по сравнению с явно скомпилированными проектами, такими как библиотеки классов. –

1

Он перекомпилирует весь код в этой папке в отдельной сборке, а затем ссылается на эту сборку в вашем проекте.

Вы должны знать, что двойная ссылка может возникнуть, если вы включите эти файлы как компилируемые в свой проект. В этом последнем случае файлы одновременно компилируются в отдельной сборке (с именем temp), на которую ссылаются, а также скомпилированы в папке bin. Это начало шоу ужасов ...

0

Этих показателей заметка о папке App_Code немного устаревший, но, вероятно, до сих пор относится к типу проекта:

2) Сведите количество файлов в/Каталог app_code маленький. Если у вас есть , у вас будет много файлов классов в этом каталоге, я бы рекомендую вам вместо этого добавить отдельный проект библиотеки классов в ваше решение VS и переместить эти классы внутри него, а поскольку проекты классов библиотеки быстрее компилируются, чем компилируются классы в каталоге /app_code. Обычно это не проблема, если у вас есть только небольшое количество файлов в каталоге/app_code, но если у вас есть много каталогов или десятки файлов, вы сможете получить улучшения , переместив эти файлы в отдельный класс библиотеки , а затем ссылаться на этот проект с вашего сайта. Еще одна вещь, о которой стоит помнить, заключается в том, что всякий раз, когда вы переключаетесь с исходного кода на конструкторский вид в конструкторе VS HTML, разработчик создает команду /app_code перед загрузкой поверхности конструктора. Причина этого заключается в том, что вы можете размещать элементы управления, определенные в пределах /app_code в дизайнере. Если у вас нет каталога/app_code, или есть только несколько файлов, определенных в нем, разработчик страницы будет , способный загружать гораздо быстрее (поскольку сначала не требуется компиляция большого ).

- http://weblogs.asp.net/scottgu/archive/2006/09/22/Tip_2F00_Trick_3A00_-Optimizing-ASP.NET-2.0-Web-Project-Build-Performance-with-VS-2005.aspx