Пошаговое руководство. Преобразование проекта веб-узла в проект веб-приложения в Visual Studio

Visual Studio 2010

В данном пошаговом руководстве демонстрируются способы преобразования существующего проекта веб-узла Visual Studio в проект веб-приложения Visual Studio. Дополнительные сведения об этих типах проектов см. в разделе Сравнение проектов веб-приложений с проектами веб-сайтов.

В данном пошаговом руководстве представлены следующие задачи:

  • Открытие и проверка проекта веб-сайта.

  • Создание нового проекта веб-приложения.

  • Настройка ссылок проекта.

  • Копирование файлов в новый проект веб-приложения.

  • Преобразование файлов проекта.

  • Запуск проекта веб-приложения.

  • Добавление синтаксиса пространства имен.

  • Преобразование декларативных типизированных наборов данных.

  • Преобразование кода объекта профиля.

Для выполнения данного пошагового руководства необходимы следующие компоненты.

  • Visual Studio или Visual Web Developer Express.

  • .NET Framework 2.0 или более поздняя версия.

Перед выполнением преобразования проекта необходимо проверить правильность его работы. Это поможет предотвратить возникновение ошибок во время преобразования.

Открытие и проверка веб-проекта

  1. Откройте существующее решение.

  2. В меню Файл выберите команду Открыть, а затем выберите пункт Веб-узел.

    Откроется диалоговое окно Открыть веб-узел.

  3. Выберите папку проекта, которую необходимо открыть, а затем выберите команду Открыть.

  4. В меню Построение выберите команду Построение веб-узла.

  5. В меню Отладка выберите команду Начать отладку. Вместо этого можно нажать клавишу F5.

    ПримечаниеПримечание

    Если отображается диалоговое окно Отладка не включена, следует выбрать команду Добавить новый файл Web.config с включенной отладкой. При этом для атрибута debug элемента compilation в файле Web.config задается значение true. Перед развертыванием проекта на рабочем сервере обязательно восстановите для этого параметра значение false.

  6. Проверьте работоспособность проекта.

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

Можно добавить новый проект в существующее решение. Это оптимальный вариант в случае, если имеется несколько используемых проектов библиотеки класса. Кроме того, можно объявить запустить новый экземпляр класса Visual Studio, а затем создать новое решение и проект.

Создание нового проекта веб-приложения в новом решении

  1. В Visual Studio закройте все открытые решения.

  2. В меню Файл выберите команду Создать, затем выберите пункт Проект.

    Откроется диалоговое окно Создать проект.

  3. В диалоговом окне Новый проект в разделе Типы проектов разверните узел языка, который планируется использовать, а затем выберите тип проекта Веб, чтобы отобразить шаблоны для веб-проекта.

  4. Выберите пункт Пустое веб-приложение ASP.NET.

  5. Выберите значение для пунктов Имя, Расположение и Имя решения, и нажмите кнопку ОК, чтобы создать проект веб-приложения.

Настройка ссылок проекта

Если для проекта веб-сайта требуются дополнительные ссылки на проект или сборку, можно добавить их в проект веб-приложения.

Чтобы предотвратить возникновение ошибок, перед преобразованием файлов проекта следует добавить в проект веб-приложения ссылки на сборки, находящиеся в папке "Bin" проекта веб-сайта.

Дополнительные сведения о ссылках см. в разделе Ссылки проекта.

Добавление ссылок в проект веб-приложения

  1. В Обозревателе решений щелкните правой кнопкой мыши узел Ссылки и выберите команду Добавить ссылку.

    Появится диалоговое окно Добавление ссылки.

  2. Выберите ссылку, которую необходимо добавить, и нажмите кнопку ОК.

  3. В Обозревателе решений щелкните правой кнопкой мыши веб-приложение и выберите команду Построить.

    Visual Studio выполнит построение проекта и проверку работоспособности ссылок проекта на проект.

Копирование файлов в проект веб-приложения

Рекомендуется добавлять существующие файлы путем копирования файлов из каталога проекта веб-сайта в каталог проекта веб-приложения.

Копирование проекта веб-узла в проект веб-приложения

  1. В Обозревателе решений щелкните правой кнопкой мыши проект веб-узла и выберите команду Открыть папку в проводнике Windows.

  2. Выберите файлы, которые необходимо скопировать, в проекте веб-узла.

  3. Щелкните правой кнопкой мыши выбранные файлы и выберите команду Копировать.

  4. В проекте веб-приложения щелкните правой кнопкой мыши проект веб-приложения и выберите команду Открыть папку в проводнике Windows.

  5. Вставьте файлы проекта веб-сайта в каталог проекта веб-приложения.

  6. В Обозревателе решений в проекте веб-приложения нажмите кнопку Показать все файлы.

  7. Выберите новые файлы в Обозревателе решений.

  8. Щелкните правой кнопкой мыши выбранные файлы и выберите команду Включить в проект.

Одно из различий между проектом веб-сайта и проектом веб-приложения заключается в том, что в проекте веб-сайта в ASP.NET динамически создаются частичные классы для страниц и пользовательских элементов управления веб-форм ASP.NET. После копирования файлов из проекта веб-узла в проект веб-приложения файлы с выделенным кодом для каждой страницы и пользовательский элемент управления все равно будут связаны с файлами ASPX, MASTER и ASCX. Файлы DESIGNER.CS и DESIGNER.VB не создавались. На следующем этапе выполняется преобразование данных страниц, чтобы сохранить их частичные классы в файле DESIGNER.CS или DESIGNER.VB.

Преобразование файлов проекта

Visual Studio предоставляет возможность преобразования страниц и классов в проектах веб-приложения для использования частичных классов. Частичные классы используются для разделения разметки в странице или пользовательском элементе управления фонового кода. Данные классы, созданные конструктором, хранятся в файле отдельно от файла с выделенным кодом.

Процесс преобразования вызывает в Visual Studio рекурсивный анализ всех страниц, главной страницы и пользовательского элемента управления в проекте, а также автоматическое создание файла .designer.cs или .designer.vb для каждого из объектов. Visual Studio также настраивает файлы с расширениями ASPX и ASCX на использование атрибута codeBehind вместо атрибута codeFile. Кроме того, в процессе преобразования папка App_Code переименовывается в Old_App_Code.

Преобразование страниц и классов для использования частичных классов в проекте веб-приложения

  1. В Обозревателе решений щелкните правой кнопкой мыши корневую папку проекта, содержащую страницы и классы, которые необходимо преобразовать, а затем выберите команду Преобразовать в веб-приложение.

  2. Выполните построение проекта, чтобы выявить ошибки компиляции.

Если ошибки обнаружены, скорее всего, они возникли в силу одной из двух следующих причин:

  • Пропущена ссылка на сборку, которая должна быть добавлена в проект.

  • Проблемы с динамически созданным типом, например с объектом Profile или типизированным набором данных.

Если пропущена ссылка на сборку, следует открыть диспетчер ссылок и добавить недостающую ссылку. Если используется динамически созданный тип, см. подразделы Преобразование декларативных типизированных наборов данных и Преобразование кода объекта профиля ниже в этом разделе.

Поскольку ASP.NET выполняет динамическую компиляцию всех классов в папке App_Code, не следует хранить в этой папке классы, компиляция которой выполняется в рамках проекта веб-приложения. В противном случае компиляция класса будет выполнена дважды. В первый раз компиляция выполняется в рамках сборки проекта веб-приложения Visual Studio, а второй раз во время выполнения ASP.NET. Это может стать причиной возникновения исключения "не удается загрузить тип", которое возникает вследствие дублирования имен типов в приложении.

Вместо этого следует хранить файлы класса в любой папке проекта, кроме папки App_Code. Файлы сохраняются автоматически с помощью команды Преобразовать в веб-приложение, которая переименовывает папку в Old_App_Code.

Запуск проекта веб-приложения

Теперь можно скомпилировать и запустить приложение. По умолчанию Visual Studio использует для запуска сайта встроенный сервер разработки Visual Studio Development Server. Кроме того, можно настроить проект для использования служб IIS. Для управления параметрами проекта веб-приложения щелкните правой кнопкой мыши проект и выберите пункт Свойства. Затем можно выбрать вкладку Web и конфигурировать параметры времени выполнения.

Дополнительные сведения см. в разделе Вкладка "Веб", свойства проекта.

При выполнении преобразования проекта веб-сайта в проект веб-приложения следует принять во внимание следующие параметры преобразования.

  • Добавление синтаксиса пространства имен.

  • Преобразование декларативных типизированных наборов данных.

  • Преобразование кода объекта профиля.

Добавление синтаксиса пространства имен

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

Например, при работе с C# можно добавлять пространства имен в код в существующих классах в Visual Studio с помощью команды контекстного меню Разместить во фрагменте в редакторе кода C#.

Добавление пространства имен в существующие классы

  1. Откройте файл кода, который необходимо изменить.

  2. Выберите класс (или несколько классов) в редакторе исходного кода, щелкните правой кнопкой мыши выделенный код и выберите команду Разместить во фрагменте.

  3. Выберите из списка элемент Пространство имен.

Файлы с расширениями ASPX, ASCX, MASTER, ASHX, ASMX и ASAX содержат директивы (например, директиву @ Page) с атрибутом Inherits или Class, которая перечисляет имена классов, которые они вызывают, если являются страницами фонового кода. При добавлении пространств имен к файлам с выделенным кодом, относящихся к указанным типам, следует также добавлять пространство имен к объявлениям Inherits и Class. Например, при добавлении пространства имен WebApplication5 в файл с выделенным кодом страницы с именем Details.aspx следует также изменить значение атрибута Inherits директивы @ Page с inherits=Details_aspx на inherits=WebApplication5.Details_aspx.

ПримечаниеПримечание

Если необходимо несколько раз обновить пространство имен в файле, можно воспользоваться функцией "найти и заменить" в редакторе Visual Studio.

Дополнительные сведения об использовании команды Разместить во фрагменте см. в разделе Практическое руководство. Использование окружающих фрагментов кода.

Преобразование декларативных типизированных наборов данных

Если проект веб-сайта содержит классы строго типизированного набора данных в папке App_Code, следует внести дополнительные изменения, чтобы исправить элемент connectionString в файле Web.config. Необходимо также переустановить элемент connectionString для каждого объекта TableAdapter в классе набора данных.

Исправление элемента connectionString для строго типизированного набора данных

  1. В Обозревателе решений правой кнопкой мыши щелкните класс набора данных в папке App_Code, а затем выберите пункт Конструктор представлений.

    Для набора данных отобразится окно Конструктор.

    ПримечаниеПримечание

    Во время настройки подключения набора данных можно дважды щелкнуть мышью набор данных, чтобы отобразить его в конструкторе.

  2. Щелкните правой кнопкой мыши объект TableAdapter и выберите пункт Свойства.

  3. Выберите свойство Connection и переустановите подключение путем выбора доступного параметра.

    При обновлении подключения обновится также ссылка строки подключения.

  4. Повторно выполните описанные шаги для каждого объекта TableAdapter в каждом наборе данных.

Преобразование кода объекта профиля

Свойства профиля позволяют хранить и извлекать данные профиля пользователя в базе данных персонализации. В проектах веб-сайта ASP.NET автоматически добавляет объект Profile (экземпляр класса ProfileCommon) на каждую веб-страницу ASP.NET в проекте. Этот объект предоставляет типобезопасный доступ ко всем свойствам, определенным в разделе профиля в файле Web.config. Для данного объекта можно получить данные IntelliSense и автоматически сохранять и извлекать оттуда значения. Дополнительные сведения о свойствах Profile см. в разделе Общие сведения о свойствах профилей ASP.NET.

Проект веб-приложения не включает автоматически класс ProfileCommon. Тем не менее можно создать собственный класс ProfileCommon, содержащий типобезопасные свойства для элементов, настроенных в системе профиля. Далее можно получить доступ к текущим свойствам Profile объекта HttpContext, чтобы получать и задавать свойства. В следующем примере показано создание пользовательского класса ProfileCommon, содержащегося в файле Class1.cs (Class1.vb для Visual Basic).

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.Profile;

namespace WebApplication1
{
    public class ProfileCommon
    {
        public Teachers Teachers
        {
            get
                {
                return (Teachers) HttpContext.Current.Profile.GetPropertyValue("Teachers");
                }
            set
            {
        HttpContext.Current.Profile.SetPropertyValue("Teachers",value);
            }
        }
    }
}

Затем можно добавить экземпляр класса ProfileCommon с именем Profile на страницу, которая должна использовать систему профиля, как показано в следующем примере.

    public partial class _Default : System.Web.UI.Page
    {
        ProfileCommon Profile = new ProfileCommon();
        protected void Button1_Click(object sender, EventArgs e)
        {
            Teachers teachers = new Teachers();
            teachers.Add(new Teacher("scott"));
            teachers.Add(new Teacher("bob"));
            teachers.Add(new Teacher("paul"));

            Profile.Teachers = teachers;    
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            GridView1.DataSource = Profile.Teachers;
            GridView1.DataBind();
        }
    }

Другой код на странице изменять необязательно. Можно использовать систему профилей так же, как в исходном проекте веб-узла. Дополнительные сведения см. в разделе Общие сведения о свойствах профилей ASP.NET.

Показ: