На выходных я был немного жесток и решил обновить проект до платформы 2.0. Поскольку VS2003 и 2005 могут сосуществовать, решить проблему относительно легко. Установите Pro-версию 2005, откройте исходный проект и выполните обновление. Мастер появится автоматически. Проект содержит 7 подпроектов. Вся логика и отображение реализованы в фоновом проекте. Каждый файл во внешнем веб-проекте реализует только вызов фонового метода, поэтому в фоновом синтаксисе не используются никакие дополнительные методы. обновление проходит очень гладко.
Подводя итог, файлы проекта в веб-проекте были удалены. Оказывается, в процессе компиляции также были учтены два несвязанных между собой файла ASPX. Я скомпилировал его, загрузил на сервер и сообщил об ошибке. Позже я обнаружил, что во вновь скомпилированном проекте не было библиотеки Dll веб-проекта, но она все еще была в каталоге сервера. Результатом является беспорядок внутренних ссылок. Удалите Dll старого веб-проекта, и все в порядке.
Затем я планировал попробовать режим публикации. Я использовал функцию веб-сайта публикации в пункте меню «Создать» VS2005, чтобы установить каталог для публикации. Параметр был установлен так, чтобы не разрешать обновления. Фактически он копировал все в веб-каталоге, поэтому. процесс компиляции был очень медленным. После завершения компиляции в каталоге bin сгенерировалась куча вещей. Я подумал, что копирование этих вещей на сервер избавит от необходимости чистой компиляции. Оказывается, процесс csc все равно появляется при первом доступе к странице. После того, как весь сайт был переключен, еще была куча процессов csc, но процесс компиляции был немного быстрее, чем раньше.
Возникла еще одна серьезная проблема. Программа через некоторое время автоматически перезапустилась, что привело к повторной компиляции. Позже на сервере появилось окно с сообщением о том, что произошла ошибка в процессе w3wp.exe. это? После нажатия кнопки «Отмена» w3wp.exe автоматически перезапустился, и начался новый раунд перекомпиляции. Этот процесс повторялся три раза, и я так испугался, что быстро переключился обратно на версию 1.1. Я заглянул в средство просмотра событий и обнаружил кучу необработанных исключений, которые по сути представляли собой ошибки с пустыми значениями. Странно, в 1.1 проблем не было и код не менялся.
Позже я нашел статью (похоже, никто на китайском языке не упомянул об этом) http://www.eggheadcafe.com/articles/20060305.asp . Обработка необработанных исключений в версии 2.0 сильно отличается от обработки в версии 1.1. другой, 1.1 будет игнорировать его, если это не повлияет на генерацию страницы. А версия 2.0 заставит процесс сообщить об ошибке, что напрямую повлияет на работу всего веб-сайта. Звучит как серьезная проблема, но кажется более разумной, иначе программисты и дальше будут игнорировать эту ошибку. Однако из-за этой проблемы невозможность переключения веб-сайтов также является серьезной проблемой. Поэтому метод плавного перехода все равно необходим. Как упоминалось выше, этот метод заключается в самостоятельном написании HttpModule для обработки всех необработанных исключений и записи информации об исключениях в системные события, что полезно для обработки программистами. Исходный код и загрузка двоичного файла этого HttpModule также представлены выше, включая демонстрационное веб-приложение.
Сегодня я наконец понял метод компиляции версии 2.0 перед развертыванием. Использовать VS для публикации веб-сайта неправильно. Для компиляции вручную необходимо использовать aspnet_compiler.exe, а процесс компиляции основан на фактических настройках веб-сайта. Другими словами, вы должны загрузить содержимое веб-проекта на веб-сайт, указать путь к веб-сайту в IIS, а затем использовать aspnet_compile для компиляции. Этот процесс фактически помещает сгенерированную dll в C:. те, которые находятся в каталоге кэша в WindowsMicrosoft.Net, точно такие же, как те, которые создаются csc.exe, когда пользователь фактически обращается к странице. После этого шага при втором посещении пользователем не будет выполняться никакое действие компиляции.
Так устал. Кстати, я придумал метод плавного переключения, когда два веб-сайта указывают на два разных каталога, один из которых не имеет заголовка хоста, а другой имеет заголовок хоста для обновления. После обновления веб-сайта с помощью заголовка хоста используйте aspnet_compiler для его компиляции, а затем поменяйте заголовки хостов двух веб-сайтов, чтобы вновь посещенные пользователи были перенаправлены на вновь скомпилированный веб-сайт, и пользователь не чувствовал никакой задержки. Просто обновите другой сайт в следующий раз.
http://www.cnblogs.com/unfish/archive/2006/09/10/500230.html