Как Visual Studio специально обрабатывает папку App_Code?

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

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

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


person John K    schedule 28.08.2013    source источник


Ответы (3)


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

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

См. документацию здесь.

person Tushar    schedule 01.09.2013
comment
Это полезный ответ. Таким образом, папка App_Code динамически компилируется различными способами при небольших изменениях, и это приводит к различиям в производительности по сравнению с явно скомпилированными проектами, такими как библиотеки классов. - person John K; 06.09.2013

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

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

person Softlion    schedule 05.09.2013

Эти заметки о производительности папки 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_-Оптимизация-ASP.NET-2.0-Web-Project-Build-Performance-with-VS-2005.aspx

person John K    schedule 05.09.2013