Как преобразовать сайт ASP.NET в веб-приложение ASP.NET - PullRequest
83 голосов
/ 09 апреля 2009

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

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

Ответы [ 7 ]

98 голосов
/ 09 апреля 2009

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

[Акцент мой]

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

  • Добавьте новое «Веб-приложение» в ваше решение VS 2008 (Файл-> Добавить-> Новый Проект-> C # -> Веб-> ASP.NET Web Application).

  • После этого вы копируете все файлы старого «веб-сайта» на свой новый создал «веб-приложение», и переопределить любые файлы, созданные в нем по умолчанию

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

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

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

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

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

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

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

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

11 голосов
/ 09 апреля 2009

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

Если ваше веб-приложение растет ... лучше разделить его на несколько проектов. Преобразование из проекта веб-сайта в проект веб-приложения мало поможет.

4 голосов
/ 14 августа 2013

Если у вас возникли проблемы с сборкой нового проекта веб-приложения, проверьте свойства файла в Visual Studio всех «вспомогательных» классов. Для проекта, который я конвертировал, для Build Action было задано Content, тогда как это должен был быть Compile.

3 голосов
/ 23 июня 2012

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

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

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

СЛЕДУЮЩИЙ: Удалите все ручные ссылки, такие как атрибут «Наследовать» в директиве PAGE, на другие файлы на вашем сайте, поскольку пространства имен БУДУТ обеспечивать централизованную ссылку на классы.

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

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

3 голосов
/ 21 октября 2011

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

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

2 голосов
/ 30 сентября 2015

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

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

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

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

  8. Устранить все недостающие зависимости.
  9. Сложение
0 голосов
/ 03 мая 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...