CodeFile против CodeBehind

139

В чем разница между CodeFile = "file.ascx.cs" и CodeBehind = "file.ascx.cs" в объявлении пользовательского элемента управления ASP.NET?

Один новее или рекомендуется? Или у них есть конкретное использование?

Soldarnal
источник

Ответы:

164

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

CodeFile : вы предоставляете исходный файл с решением для развертывания. Среда выполнения ASP.NET 2.0 компилирует код при необходимости. Скомпилированные файлы находятся в папке Microsoft.NET [версия .NET] \ Temporary ASP.NET Files.

Шафкат Ахмед
источник
2
Итак, означает ли это, что разработчик должен вручную изменить атрибут директивы Page или есть способ создать веб-проект, который по умолчанию выбирает выделенный код или файл кода при каждом добавлении новой веб-страницы?
Matt W
39
Как я вижу, CodeFile предназначен для использования для «WebSite», а «Codebehind» предназначен для «Project Web Application», поскольку его необходимо скомпилировать. Таким образом, при преобразовании «Веб-сайта» в «Проект веб-приложения» нам может потребоваться вручную изменить все вхождения CodeFile на Codebehind!
renegadeMind
2
CodeFiles удобны во время разработки, потому что вы можете протестировать изменения после простого сохранения и обновления страницы и без необходимости сборки проекта. Вы по-прежнему можете дополнительно «опубликовать» файлы модели компиляции .Net 2+ CodeFile как библиотеки DLL, если вам не нравится размещать файлы .cs и .vb на рабочем сервере. Когда вы публикуете свой проект, вы можете дополнительно выбрать параметры «Предварительная компиляция», чтобы превратить один или оба из ваших файлов .aspx и .cs / .vb в библиотеки DLL, по сути, как CodeBehind.
scradam
1
Как отметил renegadeMind (и судя по полученным голосам), я думаю, что ответ следует отредактировать, чтобы подчеркнуть тот факт, что CodeFile глубоко связан с решением типа «веб-сайт», тогда как CodeBehind связан с «проектом веб-приложения» . К сожалению, мое изменение было отклонено.
frenchone 06
3
тот факт, что программный код связан с asp 1.1, в то время как кодовый файл связан с asp.net 2.0, может указывать на то, что кодовый файл «превосходит» кодовый файл, когда это не так (и ИМХО, это как раз наоборот: веб-приложения лучше, чем веб-сайты)
frenchone 06
5

Перед запуском файл с выделенным кодом необходимо скомпилировать, но в 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 Application. Когда я открываю веб-сайт из Visual Studio, у меня нет проблем с ошибками парсера или ссылочными ошибками. Эта путаница возникает только тогда, когда я открываю приложение как проект в Visual Studio.

Дэвид Хиого
источник
1
Я знаю, что ты имеешь в виду, Джон. И, может быть, он заслуживает отрицательного голоса, но сейчас я действительно борюсь с этой проблемой. Может быть, мои трудности не в этой разнице, а в чем-то другом. Однако, хотя принятый ответ отвечает на вопрос, он не помогает решить практическую проблему, с которой я столкнулся. Может, мне стоит задать новый вопрос.
DavidHyogo