Классы, находящиеся в App_Code, недоступны

Я создал веб-сайт в ASP.NET и создал класс и поместил его в папку App_Code. Однако я не могу получить доступ к этому со своих других страниц. Что-то нужно настроить для этого? Я сделал это в предыдущих проектах, но не в этом, так или иначе.

namespace CLIck10.App_Code
{
    public static class Glob
    {
        ...
    }
}

Ответ 1

Щелкните правой кнопкой мыши файл .cs в папке App_Code и проверьте его свойства.

Убедитесь, что для параметра "Действие сборки" установлено значение "Скомпилировать".

Ответ 2

Поместите это вверху других файлов, где вы хотите получить доступ к классу:

using CLIck10.App_Code;

ИЛИ получить доступ к классу из других файлов, например:

CLIck10.App_Code.Glob

Не уверен, что это ваша проблема или нет, но если вы были новичком в С#, тогда это легко сработает.

Обновление. Недавно я обнаружил, что если я добавлю папку App_Code в проект, я должен закрыть/повторно открыть Visual Studio, чтобы он правильно распознал эту "специальную" папку.

Ответ 3

Перейдите на страницу, откуда вы хотите получить доступ к классу App_code, а затем добавьте пространство имен класса app_code. Вам нужно предоставить оператор using следующим образом:

using WebApplication3.App_Code;

После этого вам нужно будет перейти в свойство класса app_code и установить "Build Action" в "Compile".

Ответ 4

убедитесь, что вы используете то же пространство имен, что и ваши страницы

Ответ 5

Я еще не понял, почему это происходит, но у меня были классы, которые были в моей папке App_Code, которые вызывали методы друг в друге и были в порядке, когда я построил проект .NET 4.5.2, но затем мне пришлось отменить его до 4.0, поскольку целевой сервер не обновлялся. Это когда я нашел эту проблему (после исправления langversion в моем web.config от 6 до 5... другой рассказ)....

Один из моих методов продолжал иметь такую ​​ошибку, как:

The type X.Y conflicts with the imported type X.Y in MyProject.DLL

Все мои классы уже были настроены на "Компиляция" в своих свойствах, как это было предложено в принятом ответе здесь, и у каждого из них было одинаковое пространство имен, и каждый из них имел using MyNamespace; в верхней части каждого класса.

Я обнаружил, что если бы я просто переместил классы-нарушители, которые должны были вызвать методы друг в друге, в стандартной папке с именем что-то отличное от "App_Code", они перестали иметь проблему с конфликтом.

Примечание. Если вы создаете стандартную папку под названием "AppCode", переместите в нее свои классы, удалите папку "App_Code", а затем переименуйте "AppCode" в "App_Code", ваши проблемы вернутся, Неважно, если вы используете опцию "Новая папка" или "Добавить ASP.NET Folder" для создания "App_Code" - она, похоже, вводит имя.

Возможно, это просто проблема .NET 4.0 (и, возможно, раньше)... Я был в порядке 4.5.2 перед тем, как вернуться!

Ответ 6

Мне было проще перемещать файлы в отдельный проект библиотеки классов, а затем ссылаться на этот проект в веб-проекте и применять пространство имен в разделе using файла. По какой-то причине другие решения не работали для меня, но эта работа была выполнена.

Ответ 7

В моем случае я не мог получить проект для сборки с классами, определенными в папке App_Code.

Невозможно воспроизвести сценарий именно для комментариев, но ему пришлось закрыть и снова открыть визуальную студию для совместной работы intellisense...

Я заметил, что когда класс в папке App_Code установлен в "Компиляция" вместо "Контент" (щелкните правой кнопкой мыши), что ошибки исходили из второй версии класса... Посмотрите на левую часть, большинство из трех из трех полей между областью кода и вкладкой. "Другой" назывался что-то по строкам 10_App_Code или тому подобное.

Чтобы исправить проблему, я переименовал папку из App_Code в Code, явно задал пространства имен в классах и установил все классы в "Compile"