Класс страницы вне App_Code не будет компилироваться
-
13-09-2019 - |
Вопрос
У меня есть веб-сайт, на котором есть 2 файла следующим образом:
- страница.aspx
- страница.aspx.cs
Раньше я мог просто переместить новые файлы на веб-сервер, и IIS автоматически скомпилировал файлы, и я мог получить доступ к странице, например.
http://www.website.com/page.aspx
...и соответствующие функции класса страницы, содержащиеся в файле .cs, будут работать нормально.
Теперь я получаю ошибку:«Не удалось загрузить тип namespace.classname», который относится к моему классу страницы.
Теперь по какой-то странной причине мне приходится поместить все мои файлы .cs, даже классы страниц, в папку app_code.
Все, что изменилось на моем веб-сайте, это то, что я реорганизовал структуру так, что вместо того, чтобы мои страницы находились в корне сети, они теперь находятся внутри. http://.../newfolder/page.aspx.
По какой-то причине все мои файлы page.aspx.cs теперь должны находиться в app_code.
Есть идеи?
Решение
Похоже, вы путаете проект веб-приложения и веб-сайт.
Вы уверены, что файлы одинаковые?Возможно, в одной директиве @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?Проверьте тег «компиляция».Я не уверен, что вы могли бы сделать, чтобы это вызвать, но я уверен, что вы могли бы вызвать это. некоторый хаос.