Класс страницы за пределами App_Code не будет компилироваться

У меня есть веб-сайт, на котором есть 2 файла:

  • page.aspx
  • page.aspx.cs

Раньше я мог просто перетащить новые файлы на веб-сервер, и IIS автоматически компилировал файлы, и я мог получить доступ к странице, например.

http://www.website.com/page.aspx

... и связанные функции в классе страницы, содержащиеся в файле .cs, будут работать нормально.

Теперь я получаю сообщение об ошибке: «Не удалось загрузить тип namespace.classname», который относится к моему классу страницы.

Теперь по какой-то странной причине мне нужно поместить все мои файлы .cs, даже классы страниц, в папку app_code.

Все, что изменилось на моем веб-сайте, это то, что я реорганизовал структуру, так что вместо того, чтобы мои страницы находились в корневом веб-каталоге, они теперь находятся внутри http://.../newfolder/page.aspx.

По какой-то причине все мои файлы page.aspx.cs теперь должны находиться в app_code.

Любые идеи?


person Remotec    schedule 03.11.2009    source источник
comment
Вы можете разместить код?   -  person this. __curious_geek    schedule 03.11.2009
comment
Вы не используете Visual Studio для управления своим веб-проектом? Похоже, что что-то подобное вряд ли произойдет, если вы это сделаете.   -  person JoshMock    schedule 03.11.2009
comment
Да, используя VS. Мы обнаружили, что файлы, загруженные с моего компьютера, работают нормально. Однако точно такие же файлы, загруженные с компьютера моих коллег, не работают. Его файлы всегда должны иметь файл .cs, помещенный в папку app_code! Даже самые простые файлы с одним ответом. Запись в загрузке страницы не работают. Каждый раз, когда он загружает файлы на сервер, они будут работать, только если файл .cs будет помещен в app_code.   -  person Remotec    schedule 04.11.2009
comment
Ваш проект - это веб-сайт или веб-приложение?   -  person Jack Marchetti    schedule 05.11.2009


Ответы (1)


Похоже, вы смешиваете проект веб-приложения и веб-сайт.

Вы уверены, что файлы точно такие же? Возможно, одна директива @Page говорит CodeBehind = Page.aspx.cs, а другая - CodeFile = Page.aspx.cs?

CodeBehind требует компиляции проекта, поэтому вы не можете просто добавить новый CS-файл, вам нужно загрузить новую скомпилированную DLL. CodeFile позволит динамическую компиляцию.

Каталог App_Code динамически компилируется (в обоих случаях) при доступе к вашему приложению, поэтому директива Inherit имеет допустимый тип, когда вы помещаете туда файл. В общем, не делайте этого. Вы хотите, чтобы файл .cs шел вместе с файлом .aspx. Используйте App_Code для бизнес-логики или служебных классов, которые не связаны с определенной страницей.

Наконец, настроен ли этот новый подкаталог как новое приложение в IIS? Что изменится в файле web.config в вашем новом каталоге? Вы используете ту же версию ASP.NET? Отметьте тег "компиляция". Я не уверен, что вы могли сделать, чтобы вызвать это, но я уверен, что вы можете вызвать некоторый хаос.

person Bryan    schedule 05.11.2009