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


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


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


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


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


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

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

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


спасибо


person SourceC    schedule 24.04.2009    source источник


Ответы (2)


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

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

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

person AnthonyWJones    schedule 24.04.2009
comment
спасибо вам обоим за вашу помощь PS - извините, что не ответил раньше, но меня не было дома - person SourceC; 26.04.2009

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

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

person Jimmie R. Houts    schedule 24.04.2009