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

198

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

namespace CLIck10.App_Code
{
    public static class Glob
    {
        ...
    }
}
Малахия
источник
1
Я полагаю, вы включили пространство имен в свои веб-страницы?
Алекс Чарто
1
Возможный дубликат - stackoverflow.com/questions/409070/…
vapcguy

Ответы:

639

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

Убедитесь, что «Build Action» установлен на «Compile».

StevenMcD
источник
10
Как вы можете установить это как действие по умолчанию? или я должен сделать это для каждого файла в папке App_Code?
Малахи
3
Почему я не могу сделать это в Visual Studio 2012 ??!
РСК
4
Это похоже на ошибку в VS2012. Бывает и со мной тоже.
Джеймс Наиль
2
для тех, кому нужна более подробная информация, вы можете найти по адресу: how-to-code-net.blogspot.ro/2014/04/…
Алекса Адриан,
3
Да, это решило 142 ошибки в моем проекте Visual Studio, большое спасибо за то, что поделились этим решением: -]
Michael G. Workman
14

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

using CLIck10.App_Code;

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

CLIck10.App_Code.Glob

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

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

AaronLS
источник
1
Похоже, это было связано с действием сборки - ответ FailBoy решил проблему. Спасибо за ответ в любом случае :)
Малахи
Хороший, который работал, когда я добавил пространство имен в класс в папке App_Code.
mashtheweb
Почему мы должны включать пространство имен таким образом? Почему intelliSense не может получить доступ к этому классу без указания имени папки?
Эльхам Когестани,
10

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

using WebApplication3.App_Code;

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

user3363647
источник
4

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


источник
1
Но почему, когда это в APP_CODE? Я думал, что все, что там есть с классами PUBLIC, должно автоматически отображаться в решении !?
Fandango68
4

Я еще не выяснил, почему это происходит, но у меня были классы, которые были в моей 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

Все мои классы уже были настроены на «Compile» в своих свойствах, как указано в принятом здесь ответе, и у каждого было общее пространство имен, которое было одинаковым, и каждый имел using MyNamespace;в верхней части каждого класса.

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

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

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

vapcguy
источник
0

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

Zarepheth
источник
0

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

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

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

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

hngr18
источник