Краткое изложение нескольких проблем при обновлении ASP.NET 1.0 до ASP.NET 2.0
Автор:Eve Cole
Время обновления:2009-06-30 16:06:42
За последние несколько дней я обновил исходный проект 1.1 и обнаружил некоторые проблемы. Я суммирую их здесь и напомню друзьям, у которых не было времени на обновление или которые готовы обновиться, чтобы избежать обходных путей и потери времени в процессе обновления.
1. Форма обработки файла Global.asax отличается, и после преобразования возникают ошибки. В vs2003 Global.asax имеет пост-файл кода. В версии 2.0 файл разделения кода перемещается в каталог App_Code, чтобы его можно было автоматически преобразовать. Доступен через приложение. Доступ к любой странице ASP.NET в программе. Атрибут «Code-behind» будет удален из директив в файлах ASAX. vs2005 записывает код непосредственно в Global.asax. Поэтому вам необходимо удалить конвертированные файлы и добавить их заново, а также скопировать соответствующий код.
В версии 2.2.0 нет файла проекта. В приложении 1.1 файл проекта содержит настройки сборки, ссылки на внешние сборки и список файлов в проекте. В приложениях 2.0 настройки версий и списки файлов больше не нужны, поскольку все файлы в каталоге веб-проекта считаются частью веб-проекта.
3. Режим разделения кода.
В ASP.NET 1.1 режим разделения кода отделяет содержимое (например, test.aspx) от кода (например, test.aspx.cs). Страницы контента наследуются от страниц, разделенных кодом, которые содержат код, созданный пользователем и дизайнером.
ASP.NET 2.0 расширяет режим разделения кода за счет использования разделяемых классов, используя ключевое слово частично для разделения кода одного класса на два отдельных файла. Это позволяет классу охватывать несколько файлов. В новом режиме с разделением кода страница содержимого наследуется от скомпилированного класса, который состоит из соответствующей страницы с разделением кода и автоматически создаваемого файла-заглушки, определяющего объявления полей для элементов управления, используемых на странице содержимого. Это изменение отделяет автоматически сгенерированный код от кода пользователя и делает страницу разделения кода значительно меньше и чище. Структура частичного класса также снижает риск случайного повреждения страницы при редактировании кода, сгенерированного дизайнером.
В случае возникновения ошибки проверьте, существует ли частичное ключевое слово, в противном случае добавьте частичное ключевое слово.
4. Проверка грамматики. Программа asp.net1.1 не будет проверять синтаксические ошибки в aspx, aspcx и других файлах при компиляции, а vs2005 будет проверять синтаксис во всех aspx, aspcx и других файлах проекта при компиляции, поэтому при наличии синтаксических ошибок, это приведет к тому, что компиляция не сможет пройти.
5. Декларация контроля. Если все элементы управления объявлены на странице .aspx, удалите все объявления элементов управления из файла разделения кода, иначе будет выдано сообщение об ошибке: Дублированное определение.
6. (Только для C#) Переместите код перехвата событий из функции InitialzeComponent в файле разделения кода на страницу .aspx. Обратите внимание, что это действие не применяется к автоматически вызываемым событиям, включая Page_Init, Page_Load, Page_DataBind, Page_PreRender, Page_Unload, Page_Error, Page_AbortTransaction и Page_CommitTransaction.
7. Метод развертывания (предварительно скомпилированный, полностью скомпилированный, обновляемый сайт и т. д.). В версии 1.x веб-приложения предварительно компилировались и развертывались как одна большая сборка. Страницы контента (*.aspx) не компилируются на сервере, но их можно редактировать на сервере. Благодаря новому режиму компиляции страниц и структуре каталогов вы можете использовать множество различных конфигураций для развертывания приложений ASP.NET 2.0. В одном случае вы можете предварительно скомпилировать все страницы ASPX и развернуть веб-приложение, состоящее из полностью скомпилированных сборок. В этом режиме вы не сможете легко изменить приложение на сервере. Альтернативно вы можете развернуть свое приложение без предварительной компиляции кода. В этой конфигурации вы можете изменять страницы .aspx, файлы с отдельным кодом или любой другой код в приложении непосредственно на сервере. Когда пользователь запрашивает страницу на сервере, страница динамически компилируется.
8. Измените все свойства CodeBehind на странице .aspx на свойства CodeFile.
CodeBehind: указывает имя скомпилированного файла, содержащего классы, связанные со страницей. Это свойство нельзя использовать во время выполнения.
Это свойство предоставляется для совместимости с предыдущими версиями ASP.NET для реализации функций кода программной части. В ASP.NET версии 2.0 вместо этого следует использовать свойство CodeFile, чтобы указать имя исходного файла, и свойство Inherits, чтобы указать полное имя класса.
КодФайл
Указывает путь к файлу кода программной части, на который ссылается страница. Это свойство используется со свойством Inherits для связи исходного файла кода программной части с веб-страницей. Это свойство действительно только для скомпилированных страниц.
9. Переместите все независимые файлы кода и файл AssemblyInfo.cs в каталог App_Code.
Однако после запуска мастера преобразования вы можете обнаружить, что некоторые файлы разделения кода (например, *.aspx.cs или *.ascx.vb) были перемещены в каталог App_Code. Это указывает на то, что страница содержимого файла разделения кода содержит неверную директиву Codebehind и настроена неправильно. То есть мастер преобразования не может определить, действительно ли файл разделения кода привязан к определенной странице .aspx.
10. Веб-службы В ASP.NET 1.x веб-службы (.asmx) автоматически разделяются на пустую страницу заголовка (.asmx) и файл с разделением кода, содержащий фактические методы.
В Asp.net2.0:
• Переместите класс разделения кода в каталог App_Code, чтобы он автоматически стал доступен с любой страницы ASP.NET в приложении.
• Измените свойство CodeBehind в файле .asmx, чтобы оно указывало на новое расположение.
(Обратите внимание, что файлы с разделением кода не используют локальные классы, поэтому атрибут CodeBehind продолжает использоваться.)
• Измените все объявления областей Default, Friend и Internal на Public.
С какими проблемами вы столкнулись в процессе обновления с 1.1 до 2.0? Вы можете записать это, чтобы все могли учиться вместе и избегать обходных путей.