CodeFile vs CodeBehind


138

Яка різниця між CodeFile = "file.ascx.cs" та CodeBehind = "file.ascx.cs" в декларації управління користувачем ASP.NET?

Є один новий чи рекомендований? Або вони мають специфічне використання?

Відповіді:


163

CodeBehind : потреби компілювати (модель ASP.NET 1.1). Скомпільований двійковий файл розміщується у папці bin веб-сайту. Потрібно зробити компіляцію у Visual Studio перед тим, як розгорнути. Це гарна модель, коли ви не хочете, щоб вихідний код відображався як звичайний текст. Наприклад, при доставці клієнту, якому ви не зобов’язані надавати код.

CodeFile : Ви надаєте вихідному файлу рішення для розгортання. Виконання ASP.NET 2.0 компілює код за потреби. Скомпільовані файли знаходяться у файлах Microsoft.NET [.NET версія] \ Тимчасові файли ASP.NET.


2
Отже, чи означає це, що розробник повинен вручну змінити атрибут директиви Page або існує спосіб створення веб-проекту, який за замовчуванням вибирає код за кодом або кодовий файл, кожного разу додаючи нову веб-сторінку?
— Matt W

38
Те, як я бачу, це CodeFile, призначене для використання на "веб-сайті", а "Codebehind" призначене для "проекту веб-додатків", оскільки його потрібно скомпілювати. Отже, перетворюючи "Веб-сайт" в "Проект веб-додатків", можливо, нам знадобиться вручну змінити всі випадки CodeFile на Codebehind!
— renegadeMind

2
CodeFiles приємний під час розробки, тому що ви можете перевірити зміни після простого збереження та оновлення сторінки та без створення проекту. Ви також можете додатково "опублікувати" файли моделі компіляції .Net 2+ CodeFile як DLL, якщо вам не подобається розміщення файлів .cs та .vb на виробничому сервері. Опублікувавши свій проект, ви необов’язково можете вибрати параметри "Precompile", щоб перетворити один або обидва ваші .aspx файли та .cs / .vb файли в DLL, ефективно, як CodeBehind.
— scradam

1
Як зазначав renegadeMind (і з отриманих оновлень), я думаю, що відповідь слід відредагувати, щоб наголосити на тому, що CodeFile глибоко пов'язаний з рішенням типу "веб-сайт", тоді як CodeBehind пов'язаний з "проектом веб-додатків" . На жаль, мою редакцію відхилено.
— frenchone

3
той факт, що codebehind асоціюється з asp 1.1, а codefile пов'язаний з asp.net 2.0, може посилатися на думку, що кодовий файл є «кращим», ніж codebehind, коли їх немає (а IMHO - це точно навпаки: веб-програми краще, ніж веб-сайти)
— frenchone

5

Файл Codebehind потрібно компілювати перед запуском, але в src нам не потрібно компілювати, а потім запускати .. просто збережіть файл.


1
but in src- ти маєш на увазі but in the CodeFile?
— Дон Чідл

5

Я працюю з прикладним проектом у Visual Studio Express 2012 для Інтернету та використовую .NET 4.0. У коді за файлами для моїх логін та змін паролів я виявив ситуацію, коли мені потрібні були і CodeBehind, і CodeFile у декларації.

Якщо я не додаю посилання на файл коду, як

CodeFile=login.aspx.cs

Веб-сторінка не розбирається, і браузер відображає помилку аналізатора. Не має значення, складаю я проект чи ні.

Якщо я не додаю код за посиланням, як

CodeBehind=login.aspx.cs

Посилання на класи безпеки, такі як MembershipUser, не спрацьовують як під час компіляції, так і при спробі використання intellisense з помилкою типу "Тип або простір імен MembershipUser неможливо знайти". Я додав посилання на System.Web.ApplicationServices, як того вимагає рамка .Net 4.0.

Слід додати, що ці клопітні файли працюють у програмі на веб-сайті, створеному за допомогою інструмента застосунку IIS. Коли я відкриваю веб-сайт від Visual Studio, у мене не виникає труднощів з помилками розбору або помилками посилань. Ця плутанина виникає лише тоді, коли я відкриваю додаток як проект у Visual Studio.


1
Я знаю, що ти маєш на увазі Джон. І, можливо, це заслуговує голоси, але я зараз дуже боюся з цією проблемою. Можливо, мої труднощі пов'язані не з цією різницею, а з чогось іншого. Однак, хоча прийнята відповідь відповідає на питання, це не допомагає практичній проблемі, з якою я стикаюся. Можливо, я повинен відкрити нове запитання.
— DavidHyogo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.