Как преобразовать веб-сайт ASP.NET в веб-приложение ASP.NET

У меня есть веб-сайт ASP.NET 3.5 (visual studio lingo), но сайт продолжает расти и выглядит, среди прочих, довольно ковбоев. Я бы хотел, чтобы это преобразовалось в веб-приложение (пространства имен и все).

Это что-то, что можно легко сделать в Visual Studio? Если нет, существуют ли какие-либо другие инструменты, которые могли бы автоматически создать все пространства имен и т.д.

Ответ 1

Ну, оказывается, что опция "Конвертировать в веб-приложение" НЕ существует для "веб-сайтов". Опция "Конвертировать в веб-приложение" существует только для "веб-приложений"!!!!

[акцент мой]

Итак, вот сделка, чтобы сделать преобразования, вам необходимо:

  • Добавить новое "веб-приложение" в решение VS 2008 (File- > Add- > New Project- > С# → Web- > ASP.NET Web Применение).

  • Затем вы копируете все файлы на старом "веб-сайте" на свой новый создано "веб-приложение" и переопределить любые файлы, созданные в нем по умолчанию

  • Следующий шаг является самым уродливым, вам нужно "вручную" добавить ссылки на вашем "веб-сайте" на новый "веб-сайт" приложение ". Я думал, VS 2008 Игрушка PowerCommands сделала бы это для меня поскольку он копирует ссылки из других проектов, но это не так. У тебя есть сделать это самостоятельно, вручную и вы должны быть осторожны на этом этапе если у вас несколько версий такая же сборка (например, AJAXToolkit в моей случае) или сборок, которые имеют как GAC и локальные версии или так.

  • Продолжайте повторять последний шаг и пытаться создать "веб-приложение". Вы будете получать ошибки, такие как " '....' - неизвестное пространство имен. Ты отсутствует ссылка на сборку? ". Делать что у вас нет никого из тех, кроме где"...." заменяется на Идентификаторы используемых вами серверных элементов управления. В другими словами, продолжайте добавлять ссылки и строительство проекта до тех пор, пока ошибки, которые существуют из-за отсутствует .DESIGNER.CS или .DESIGNER.VB файлы.

  • Затем перейдите в корневой проект "веб-приложение" node в VS 2008, и правый щелкните по нему, затем вы найдете вариант "Конвертировать в веб-приложение". Что этот вариант делает на самом деле внесение небольших изменений в "@Page "и" @Control" директив страниц и управления и создания необходимых .DESIGNER.CS или .DESIGNER.VB.

  • Попробуйте снова создать "веб-приложение". Если вы получаете ошибки, посмотрите, что ссылки могут отсутствовать и/или идти нажмите "Преобразовать в веб-приложение "еще раз. Иногда, если есть какая-либо ошибка кроме тех, которые были вызваны отсутствием DESIGNER, не все страницы/элементы управления будут иметь эти Созданные для них файлы DESIGNER. Фиксирование проблемы без DESIGNER и нажмите" Преобразовать в веб-приложение" снова должен выполнить эту работу.

  • Как только вы закончите успешную сборку VS, вы должны быть готовы к работе. Начните тестирование своего веб-приложения. При желании вы можете щелкнуть правой кнопкой мыши корневой проект "веб-приложение" node в VS 2008 Solution Explorer и нажмите Затем "Свойства "перейдите на вкладку" Веб", установить "веб-приложение" на виртуальная папка в IIS (вы можете создать новый виртуальный каталог оттуда в VS). Если вы хотите использовать IIS виртуальный каталог, который старый "веб-сайт" используется, вам необходимо удалить что из IIS в первую очередь.

  • Обновление: при тестировании ваших страниц платите САМОЕ ВНИМАНИЕ занятиям в "App_Code ", особенно те без NOAMESPACE. Это может быть большой ловушка. У нас была проблема с двумя перегрузка методом расширения в том же статический класс, не имеющий пространства имен, один расширяет DateTime? (Nullable) и вызывает другую перегрузку, которая расширяет сам DateTime. Вызов другая перегрузка как метод расширения прошел сборку VS 2008 и дал нам ошибка компиляции ТОЛЬКО В RUNTIME (С IIS). Изменение вызова на другая перегрузка, вызвав ее как метод расширения для вызова его как обычный статический метод (только изменение вызов в том же классе, вызовы из другие классы оставались вызов метода) действительно разрешил этот, но ясно, что это не так безопасно, как оно использовалось быть в VS 2005. Особенно с классы без пространств имен.

  • Update2: во время преобразования VS 2008 переименовывает ваш" App_Code "в" Old_App_Code ". Это новое имя звучит уродливый, но НЕ НРАВИТСЯ НАЗАД. В модель" веб-приложения ", весь код будет в одной сборке. Во время выполнения, веб-сервер не знает, какой веб-сервер тип проекта, который вы используете. Оно делает взять весь код в папке" App_Code "и создайте для него новую сборку. Эта путь, если у вас есть код в папке с именем" App_Code ", вы закончите с RUNTIME ошибки компиляции того же типа существуют в двух сборках, один созданный VS, и тот, который создан Сервер разработки IIS/ASP.NET. к избегайте этого. оставьте" Old_App_Code "с тем же именем или переименовать его в ЛЮБОЕ ЗА ИСКЛЮЧЕНИЕМ:" App_Code ". Не поместите любой код в такой" App_Code ", папке и, желательно, НЕ папку с таким именем в вашей" сети приложение ".

Я знаю это с тех пор, но забыл теперь, поскольку я не использовал модель "веб-сайт" для длинных: (.

Ответ 3

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

Ответ 4

Сначала я столкнулся с теми же проблемами. После выполнения Wrox Professional ASP.NET 4.0, я нашел следующее решение для моего случая.

Сначала я создал новое веб-приложение. Скопировали все файлы веб-сайта в папку веб-приложения. Щелкните правой кнопкой мыши приложение и выберите "конвертировать" в веб-приложение.

Вы можете спросить, почему вам нужно преобразовать веб-приложение в веб-приложение. Ответ заключается в том, что при создании веб-сайта вы просто кодируете файл .cs, когда это требуется. Веб-приложение, однако, автоматически объявляет .design.cs(или .vb) и файл .cs для раздела кода и дизайна.

СЛЕДУЮЩИЙ: удалите все справочные ссылки, такие как атрибут "Наследует" в директиве PAGE, к другим файлам на вашем веб-сайте, так как пространства имен WILL позаботятся о централизации ссылок на классы.

У меня также возникла проблема, так как я не включил в проект проект OBJ и BIN. Если вы считаете, что вам не хватает папок BIN и OBJ, просто нажмите значок "Показать все файлы" в обозревателе решений, а затем щелкните правой кнопкой мыши по отсутствующим папкам и добавьте в проект. (чтобы убедиться, что они компилируются вместе с проектом.)

UPDATE: Как @deadlychambers указывает в комментариях: вы можете искать везде, выполняя "Ctrl + Shift + F", а затем ищите Inherits="(.*?)". Это обнаружит все вхождения и, вероятно, сэкономит вам некоторое время!

Ответ 5

Создайте новое веб-приложение в VS 2010.
1. Используя проводник Windows скопируйте все ваши файлы в папку проекта.
2. В VS 2010 разработчик решений показывает все файлы.
3. Выберите файлы и папки - щелкните правой кнопкой мыши в проекте.
4. Щелкните правой кнопкой мыши проводник решения проекта и выберите "Преобразовать в веб-приложение".

Существует довольно много небольших различий, например, папка App_Code будет переименована в old_app_code, что на удивление не вызывает ошибок. Для TypeName в ваших объектных источниках данных и наследованиях в теге @Page может понадобиться [ProjectName]. приставка добавляется глобально. Например, если ваше имя типа было "BusinessLogic.OrderManager", а ваше имя проекта - InventorySystem, вам необходимо изменить его на InventorySystem.BusinessLogic.OrderManager. Также некоторые изменения дисплея, такие как обязательные поля для проверки подлинности, больше не имеют красного шрифта, они по умолчанию черны.

Ответ 6

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

Наличие ReSharper в вашем распоряжении помогает в рефакторинге файлов aspx.

  • Настройте решение и создайте пустую WebApplication
  • Скопировать весь файл поверх
  • Файлы aspx в проектах сайта не имеют namspace. Оберните свои классы в соответствующие пространства имен
  • Во время копирования все мои страницы в подпапках были переименованы в мое имя проекта и имя папки, поэтому я получил 40ish public partial class FolderName_Projectname : Page Если необходимо переименовать все файлы с помощью Resharper или вручную. Если вы столкнулись с несколькими ошибками, например "There is already a member Page_Load() defined", это, скорее всего, связано с неправильными именами классов и дублированием.
  • После добавления пространства имен
  • Замените CodeFile на всех страницах aspx с помощью Codebehind и особенно обратите внимание на файлы я вашей подпапки. Убедитесь, что Inhertis="" не содержит относительный путь. Ваши пространства имен заботятся обо всем. Поэтому правильный формат Inherits="Namespace.classname". Если ваш класс имеет пространство имен NaSpa и имя файла foo.cs, это будет Inherits="NaSpa.foo"

  • После того, как вы подготовили все свои файлы (не забудьте свои мастер-страницы), запустите "Конвертировать в веб-приложение". Если после этого вы столкнулись с ошибками, промойте и повторите. Если вы столкнулись с ошибками сортировки, то "TextBoxName не может быть найдено, если вы не указали ссылку", убедитесь, что вы не забыли очистить свои страницы aspx. Хорошим индикатором является проверка автоматически созданных файлов дизайнера. Если TextBoxName не появляется там, преобразование не получилось полностью.

  • Разрешить любые отсутствующие зависимости.
  • Построить

Ответ 7

пространство имен ASP по умолчанию больше не работает. Поэтому я не могу назвать свои страницы User Controls.ascx вне страницы. Предоставление им пространства имен и изменение значения по умолчанию от ASP до моего пространства имен, похоже, сработало.