Класи, що проживають у App_Code, недоступні


197

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

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

1
Я припускаю, що ви включаєте простір імен у свої веб-сторінки?
Алекс Царто

1
Можливий дублікат - stackoverflow.com/questions/409070 / ...
vapcguy

Відповіді:


637

Клацніть правою кнопкою миші на .csфайл у App_Codeпапці та перевірте його властивості.

Переконайтесь, що для параметра "Дія побудови" встановлено значення "Компілювати".


10
Як ви можете встановити це як дію збірки за замовчуванням? чи мені це потрібно робити для кожного файлу в папці App_Code?
Малахій

3
Чому я не можу цього зробити у Visual Studio 2012 ??
РСК

4
Це здається помилкою у VS2012. Трапляється і в мене.
James Nail

2
для тих, хто хоче отримати більше деталей, ви можете знайти на сайті: how-to-code-net.blogspot.ro/2014/04/…
Alexa Adrian

3
Так, це вирішило 142 помилки в моєму проекті Visual Studio, дуже дякую за те, що поділився цим рішенням: -]
Michael G. Workman

14

Помістіть це вгорі інших файлів, де ви хочете отримати доступ до класу:

using CLIck10.App_Code;

АБО зверніться до класу з інших файлів, таких як цей:

CLIck10.App_Code.Glob

Не впевнений, це ваша проблема чи ні, але якщо ви були новачками на C #, тоді це легко отримати.

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


1
Це було пов'язане з дією складання, якщо його виглядати - відповідь FailBoy вирішила проблему. Дякуємо, що все одно відповіли :)
Малахій

Добре, що працювало, коли я додав простір імен до класу в папці App_Code.
mashtheweb

Чому ми повинні включати нампростір так? Чому intelliSense не може отримати доступ до цього класу, не вказуючи назву папки?
Ельхам Кохестані

10

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

using WebApplication3.App_Code;

Після цього вам потрібно буде перейти до властивості класу app_code та встановити для параметра "Дія збірки" значення "Компілювати".


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

Усі мої класи вже були встановлені на "Збірник" у своїх властивостях, як було запропоновано у прийнятій відповіді, і кожен мав загальний простір імен, який був однаковим, і кожен мав using MyNamespace;у верхній частині кожного класу.

Я виявив, що якщо я просто перемістив класи-порушники, які повинні викликати методи один одного, в іншу, стандартну папку з іменем, що відрізняється від "App_Code", у них перестане виникати ця конфліктна проблема.

Примітка . Якщо ви створили стандартну папку під назвою "AppCode", перенесіть в неї свої класи, видаліть папку "App_Code", потім перейменуйте "AppCode" на "App_Code", ваші проблеми повернуться. Не має значення, якщо ви використовуєте параметр "Нова папка" або "Додати ASP .NET папку" для створення "App_Code" - це, здається, вводить ім'я.

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


0

Мені було легше перемістити файли в окремий проект бібліотеки класів, а потім посилатись на цей проект у веб-проекті та застосовувати простір імен у usingрозділі файлу. Чомусь інші рішення не працювали для мене, але ця робота була зроблена.


0

У моєму випадку я не міг отримати проект для побудови за допомогою класів, визначених у папці App_Code.

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

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

Щоб виправити проблему, я перейменував папку з App_Code в код, явно встановив простори імен для класів і встановив для всіх класів "Компілювати"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.