Тип или пространство имен не может быть найдено из папки App_code - PullRequest
31 голосов
/ 07 февраля 2012

Я написал класс с именем ArchivedFilesWrapper в папке App_code моего проекта, однако, когда я использую этот класс в другом файле в другой папке, я получаю сообщение об ошибке:

Не удалось найти тип или имя пространства имен ArchivedFilesWrapper (отсутствует директива using или ссылка на сборку?)

Я думал, что на каждой странице должна быть возможность найти классы, содержащиеся в одном и том же проекте, но я думаю, что это не так. Может кто-нибудь сказать, пожалуйста, какое заявление мне нужно иметь?

Вот фрагмент из моего класса:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace EMCWebAdmin.App_Code
{
    public class ArchivedFilesWrapper
    {

Ответы [ 4 ]

71 голосов
/ 15 сентября 2013

Возможно, проблема будет решена путем изменения свойства Действия сборки исходного файла * .cs на Компиляция с Содержимое .В обозревателе решений щелкните правой кнопкой мыши исходный файл и выберите «Свойство».

Обратите внимание, что папка App_Code предназначена для использования в проектах веб-сайтов .

Обратите внимание, что для Проект веб-приложения или MVC проект, добавление в проект папки App_Code и помещение в нее файлов * .cs вызовет проблемы.Я невежественно добавил папку App_Code в свой проект MVC из обозревателя решений.VS по умолчанию установил пространство имен в MyProjectName.App_Code. В этом случае Visual Studio 2012 по умолчанию установил действие «Построить для содержимого», хотя тип был .cs code .После того как я изменил Свойство действия сборки исходного файла * .cs на Компилировать с Содержимое , пространство имен было разрешено в других папках проекта.Однако из-за проблем мне пришлось изменить имя папки - см. Ниже.

Важно

В MVC или Веб-приложение проекта, папка App_Code вызывает проблемы, поскольку она имеет Веб-сайт Семантика типа проекта.Эта папка компилируется при публикации (развертывании) на сервере.Изменяя действие «Сборка» с «Содержимое» на «Компиляция», вы решаете проблему пространства имен в своей среде разработки путем принудительной немедленной компиляции, но у вас возникают проблемы, когда вторая компиляция приводит к objects defined twice ошибкам при развертывании.Поместите файлы кода в папку с другим именем.Если вы преобразовали веб-сайт в веб-приложение, ознакомьтесь с инструкциями в Интернете, но не в рамках этого вопроса.Подробнее о папке App_Code в различных типах проектов см. Этот блог

4 голосов
/ 07 февраля 2012

Вам необходимо добавить

using EMCWebAdmin.App_Code;

на все страницы, которые вы хотите использовать в классе.

В качестве альтернативы вы можете изменить пространство имен, в котором находится класс, на то же самое.что все веб-страницы используют, предполагая, что это EMCWebAdmin

, тогда в вашем классе измените

namespace EMCWebAdmin.App_Code
    {
...

на

namespace EMCWebAdmin
    {
...

Это особенность Visual Studio, есливы создаете класс в структуре папок, он использует пространство имен, следующее за структурой папок.

2 голосов
/ 05 ноября 2012

Да, поместите calsses в другую папку (не в специальную папку asp.net) и используйте только основное пространство имен для приложения - это решит эту проблему. Спасибо johnmcp.

2 голосов
/ 08 февраля 2012

Если вы конвертируете его в веб-приложение, оно должно работать. Недостатком является то, что он больше не будет автоматически собирать ваш код в папке app_code каждый раз, когда вы изменяете его и запускаете приложение. Я никогда не видел, чтобы профессиональный разработчик использовал проект веб-сайта. Я понятия не имею, на кого были нацелены MS, когда они их создавали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...