В веб-проектах Asp.Net обнаруживает только изменения в aspx, но не в файлах cs - PullRequest
0 голосов
/ 25 апреля 2009


Q1 - Asp.Net может обнаруживать при изменении исходных файлов и автоматически перекомпилирует приложение при поступлении следующего запроса


A) Но, похоже, что с веб-сайтами Asp.Net может обнаруживать изменения, независимо от того, происходят ли они в файле с выделенным кодом (.cs) или в файле aspx, в веб-проектах Asp.Net обнаруживает только изменения это происходит внутри файла aspx, но не обнаруживает изменений внутри файлов .cs! Почему это так?


B) Asp.Net также определяет, были ли добавлены какие-либо новые файлы aspx или cs на веб-сайт. Но скомпилирует ли он при следующем запросе только добавленные файлы или будет перекомпилировать все файлы приложения?


C) Если приложение на веб-сервере содержит несколько файлов aspx, некоторые из которых созданы веб-проектом (и, следовательно, их код в файлах находится внутри одной сборки), в то время как другие файлы aspx были созданы через проект веб-сайта, как работает Asp.Net удалось выяснить, есть ли в конкретном файле aspx код, содержащийся в сборке, расположенной в каталоге Bin?


Q2 «Атрибут Codebehind используется только конструктором веб-форм Visual Studio. Атрибут не используется во время выполнения. ”

  • Я предполагаю, что атрибут CodeBehind не используется во время выполнения из-за того факта, что все файлы .cs скомпилированы в одну сборку, и, таким образом, у VS нет проблем с поиском класса, если aspx сообщает имя класса через Наследует атрибут?!

  • С другой стороны, коду Asp.Net, стоящему за моделью, нужен атрибут src, потому что здесь файлы cs компилируются в отдельные сборки и, следовательно, asp.net должен знать имя файла, указанного в атрибуте CodeFile, поэтому может как-то выяснить название сборки, в которую этот файл скомпилирован?


1039 * спасибо *

Ответы [ 2 ]

2 голосов
/ 25 апреля 2009

ASP.NET ищет код за файлом, только если не может найти тип, необходимый для завершения компиляции ASPX в существующих сборках. Зависимость от кода файла cs создается только в том случае, если это было необходимо при построении временной сборки для файла ASPX.

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

На веб-сайте нет предварительно собранной сборки, содержащей все типы в выделенном коде, поэтому для завершения временной сборки для ASPX требуется файл выделенного кода, в свою очередь добавляется зависимость от файла cs. на это временное собрание. Следовательно, любое изменение файла cs делает недействительной временную сборку.

2 голосов
/ 25 апреля 2009

Q1 a: это происходит потому, что веб-сайты динамически компилируются, а веб-приложения явно компилируются. См. Эта статья для таблицы, которая сравнивает два типа.

Q1 b: по умолчанию все перекомпилируется. Однако есть исправление для .net 3.5 sp1 ( статья базы знаний , загрузок ), которое позволяет вам выбирать, хотите ли вы, чтобы все перекомпилировалось, или вы хотите, чтобы только измененные файлы компилировать.

...