Як перетворити веб-сайт ASP.NET на веб-додаток ASP.NET


90

У мене є веб-сайт ASP.NET 3.5 (візуальна студійна мова), але сайт продовжує зростати і серед іншого виглядає досить ковбойським. Я хотів би бачити, як це перетворюється у веб-програму (простори імен та все).

Це те, що можна легко зробити у Visual Studio? Якщо ні, чи існують інші інструменти, які можуть автоматично створювати всі простори імен тощо?


4
Цей шаблон веб-сайту - це справді жахливий POS в порівнянні з шаблоном веб-програми. Я не бачу жодної вигоди від використання шаблону веб-сайту ...
Джеймс,

9
@James - лише одна з багатьох причин, я прагну відійти від цього ... Ви проповідуєте хору ....
RSolberg,

2
Я впевнений, що інструкція нижче є дуже ретельною (не прочитала її повністю), але людина на YouTube показала дуже простий спосіб перетворити веб-сайт у веб-програму тут: youtube.com/watch?v=oXptokM0v7w - як звичайно я не можу гарантувати, що це буде працювати для всіх. Я думаю, що цей метод буде працювати для людей з меншими менш складними сайтами.
дислексіканабоко,

3
Якщо ви використовуєте VS2013, не забувайте, що пункт меню перемістився .
Джон

Відповіді:


108

Ну, виявляється, що параметр "Перетворити на веб-додаток" НЕ існує для "веб-сайтів". Опція "Перетворити на веб-програму" існує лише для "веб-додатків" !!!!

[наголос мій]

Отже, ось угода, щоб здійснити перетворення, потрібно:

  • Додайте до свого рішення VS 2008 нову "веб-програму" (Файл-> Додати-> Новий проект-> C # -> Веб-> Веб-програма ASP.NET).

  • Потім ви копіюєте всі файли на старому "веб-сайті" у новостворене "веб-додаток" і замінюєте всі файли, створені в ньому за замовчуванням

  • Наступний крок є найбільш потворним, вам потрібно "вручну" додати посилання на вашому "веб-сайті" до нового "веб-додатку". Я думав, що іграшка VS 2008 PowerCommands зробить це для мене, оскільки копіює посилання з інших типів проектів, але ні. Ви повинні зробити це самостійно, вручну, і ви повинні бути обережними на цьому кроці, якщо у вас є кілька версій однієї і тієї ж збірки (наприклад, AJAXToolkit у моєму випадку) або збірок, які мають як GAC, так і локальні версії або близько того.

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

  • Потім перейдіть до кореневого вузла проекту "веб-програми" у провіднику рішень VS 2008 і клацніть правою кнопкою миші, після чого ви знайдете опцію "Перетворити на веб-програму". Те, що робить цей параметр, - це насправді невеликі зміни в директивах "@Page" та "@Control" сторінок та елементів керування, а також створення необхідних файлів .DESIGNER.CS або .DESIGNER.VB.

  • Спробуйте створити "веб-додаток" ще раз. Якщо з’являються помилки, подивіться, яких посилань може не бути, та / або ще раз натисніть кнопку «Перетворити у веб-програму». Іноді, якщо виникають помилки, крім помилок, спричинених відсутніми файлами DESIGNER, не на всіх сторінках / елементах керування файли DESIGNER будуть створені для них. Вирішення проблеми, що не стосується ДИЗАЙНЕРА, і натискання кнопки «Перетворити на веб-програму» знову має зробити це для цього.

  • Після того, як ви закінчите успішну побудову VS, ви повинні бути готові до роботи. Почніть тестувати свою веб-програму. За бажанням ви можете клацнути правою кнопкою миші на кореневому вузлі проекту "веб-програми" у VS 2008 Solution Explorer і натиснути "Властивості", а потім перейти на вкладку "Веб", щоб встановити "веб-програму" у віртуальну папку в 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 Development Server . Щоб цього уникнути. залиште "Old_App_Code" з тим самим ім'ям, або перейменуйте його на будь-що, окрім: "App_Code". Не розміщуйте будь-який код у такому "App_Code"

Я знаю це раніше, але забув це зараз, оскільки довго не використовував модель "веб-сайту" :(.


2
Ваше посилання зламане вгорі, Помилка 500
Самер Алібхай

6
Крім того, шукайте файли коду для копіювання як "вміст", а не "компіляцію"
jcolebrand

14
Для тих із вас, хто робить це у VS2013, параметр "Прикрити веб-програмою" переміщено в меню "Проект" унизу.
Ерік Сассаман,

3
@EricSassaman Але для проектів веб-сайтів для мене це зовсім не існує.
NickG

1
@NickG, ти маєш рацію, відповідно до першого рядка відповіді, це НЕ існує для проектів веб-сайтів, меню Проект навіть не існує, якщо ви не вибрали веб-програму в Провіднику рішень. Якщо в меню ви бачите "Веб-сайт", це не веб-додаток. Виконайте наведені вище дії, щоб створити порожню веб-програму, скопіювавши в неї файли. Тоді у меню проекту для вашого нового веб-додатка має бути "Перетворити на веб-програму". Ви це робили?
Ерік Сассаман

12

Покрокове керівництво: Перетворення проекту веб-сайту на проект веб-додатків у Visual Studio на MSDN

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


5

Якщо у вас виникають проблеми із створенням вашого нового проекту веб-додатків, перевірте властивості файлу у Visual Studio усіх класів "допоміжних". Для проекту, який я перетворював, Дію збірки було встановлено на Вміст, тоді як вона мала бути Компіляцією.


3

Створіть нову веб-програму в VS 2010.
1. За допомогою Провідника Windows скопіюйте всі файли в папку проекту.
2. У VS 2010 Explorer Explorer показує всі файли.
3. Виберіть файли та папки - клацніть правою кнопкою миші включити у проект.
4. Клацніть правою кнопкою миші дослідник проектного рішення та виберіть Перетворити у веб-програму.

Існує чимало невеликих відмінностей, таких як папка App_Code буде перейменована на old_app_code - це напрочуд не викликає жодних помилок. Імені Type у джерелах даних вашого об’єкта та спадкоємцям тегу @Page може знадобитися [ProjectName]. префікс, доданий у всьому світі. Наприклад, якщо ім'я вашого типу було "BusinessLogic.OrderManager", а ваше ім'я проекту - InventorySystem, вам потрібно буде змінити його на InventorySystem.BusinessLogic.OrderManager. Також деякі зміни на дисплеї, такі як необхідні валідатори полів, більше не використовують за замовчуванням червоний шрифт, а за замовчуванням чорний.


мій файл коду програми не змінився, як це передбачалося. Мені довелося щорічно перейменовувати його, а потім змінити всі cs-сторінки на компіляцію.
Майк

3

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

Спочатку я створив нову веб-програму. Скопійовано всі файли веб-сайту в папку веб-програми. Клацніть правою кнопкою миші на програмі та натисніть перетворити у веб-програму.

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

ДАЛІ: Видаліть усі посилання вручну, наприклад, атрибут "Inherits" в директиві PAGE, на інші файли на вашому веб-сайті, оскільки простори імен ДОБУТУТЬ централізовано посилатися на класи.

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

ОНОВЛЕННЯ: Як зазначає @deadlychambers у коментарях: Ви можете шукати скрізь, натискаючи "Ctrl + Shift + F", а потім шукати Inherits="(.*?)". Це знайде всі випадки і, можливо, заощадить ваш час!


1
Ви можете видалити все за допомогою Ctrl-shift-F, а потім змінити параметри пошуку для регулярного виразу та скористатися цим Inherits = "(. *)?"
DeadlyChambers

1
Переконайтесь, що це Inherits = "(. *?)", Інший захопить все, що стоїть за спадщинами, до останнього лапки.
DeadlyChambers

1
Я просто зіткнувся з проблемою, коли НЕ наявність спадщин призвело до того, що дизайнер видалив простір імен, а потім видалив клас. Я хотів би, щоб це було простіше.
DeadlyChambers

3

Зараз я успішно переніс один проект веб-сайту на веб-додаток, і є кілька спокійних моментів, на які слід звернути увагу.

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

  1. Налаштуйте своє рішення та створіть порожню WebApplication
  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

простір імен ASP за замовчуванням більше не працює. Тому я не можу зателефонувати своїм сторінкам User Controls.ascx поза межами сторінки. Надання їм простору імен та зміна типового значення з ASP на мій простір імен, здавалося, спрацювало.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.