Получение "типа или имени пространства имен не может быть найдено", но все кажется нормальным? - PullRequest
245 голосов
/ 22 июля 2010

Я получаю:

имя типа или пространства имен не найдено

ошибка для приложения C # WPF в VS2010. Эта область кода компилировалась нормально, но внезапно я получаю эту ошибку. Я пытался удалить ссылку на проект и оператор using, закрыть VS2010 и перезапустить, но все же у меня есть эта проблема.

Любые идеи, почему это может происходить, когда мне кажется, что я делаю правильные вещи в отношении ссылки и using заявления?

Я также отметил в VS2010, что intellisense для этого пространства имен работает нормально, поэтому кажется, что VS2010 имеет ссылку на проект и видит пространство имен с одной стороны, но во время компиляции его не видит?

Ответы [ 33 ]

425 голосов
/ 22 июля 2010

Это может быть результатом несовместимости версии .Net Framework между двумя проектами.

Это может произойти двумя способами:

  1. проект профиля клиента, ссылающийся на полный каркасный проект;или
  2. более старая версия фреймворка, ориентированная на более новую версию фреймворка

Например, это произойдет, если приложение настроено на использование фреймворка .Net 4 Client Profile и ссылается на проект, на который оно ссылается.предназначен для полной платформы .Net 4.

Итак, чтобы прояснить ситуацию:

  • Проект A предназначен для платформы профиля клиента
  • Проект A ссылается на проект B
  • Проект B нацелен на полную платформу

Решение в этом случае состоит в том, чтобы либо обновить целевой объект приложения (проект A), либо понизить целевой объект сборки, на который имеется ссылка (проект B).Это нормально, если приложение полного фреймворка ссылается на сборку фреймворка профиля клиента, а не наоборот (профиль клиента не может ссылаться на целевую сборку фреймворка).

Обратите внимание, что эту ошибку также можно получить, есливы создаете новый проект в VS2012 или VS2013 (который использует .Net 4.5 в качестве платформы по умолчанию) и:

  • ссылочный проект (ы) использует .Net 4.0 (это часто встречается, когда вымигрировали с VS2010 на VS2012 или VS2013, а затем добавили новый проект)

  • в указанных проектах используется более поздняя версия, например 4.5.1 или 4.5.3 (вы перенаправили таргетинг)ваши существующие проекты до последней версии, но VS по-прежнему создает новые проекты, ориентированные на v4.5, и вы затем ссылаетесь на эти старые проекты из нового проекта)

37 голосов
/ 26 мая 2015

Переустановка пакетов nuget помогла мне.После того как я изменил версии .NET Framework для синхронизации всех проектов, некоторые пакеты nuget (особенно Entity Framework) все еще были установлены для предыдущих версий.Эта команда в консоли диспетчера пакетов переустанавливает пакеты для всего решения:

Update-Package –reinstall
27 голосов
/ 21 мая 2013

При создании решения я получал ту же ошибку (не удалось найти тип или пространство имен '').Ниже я увидел предупреждение о том, что «ссылка не может быть разрешена» и что «сборка существует на диске».

Я был очень смущен, потому что моя DLL была оченьчетко в том месте, на которое ссылалась ссылка.VS, казалось, не выдвигал на первый план никаких ошибок, пока я не попытался построить решение.

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

Когда я щелкнул правой кнопкой мыши по проекту и построил только это, вместо всего решения, я не получил ошибку.

Чтобы исправить эту проблему, я добавил библиотеку в качестве зависимостив проект, который его использовал.

Для этого:

  1. Я щелкнул правой кнопкой мыши свое решение в обозревателе решений и выбрал «Свойства»
  2. Затемв «Общих свойствах» я выбрал «Зависимости проекта».
  3. Затем в раскрывающемся меню «Проекты» я выбрал проект, который опирался на библиотеку, и
  4. Поставил флажок рядом с библиотекой.находится в разделе «Зависит от»

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

22 голосов
/ 21 июня 2016

Понятия не имею, почему это сработало, но я удалил ссылку на проект, которую VS2015 сообщал мне, что не смог найти, и добавил ее снова. Решил проблему. Я пытался очистить, собрать и перезапустить VS безрезультатно.

6 голосов
/ 22 июля 2010

Сначала я хотел бы убедиться, что информация, сгенерированная вашим проектом, не повреждена. Сделайте чистку и восстановите свое решение.

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

5 голосов
/ 11 декабря 2013

Ситуация, с которой я столкнулся, была более сложной: первый проект нацелен на полный фреймворк 4.0 с установленным пакетом Microsoft.Bcl.Async.Второй проект нацелен на полный фреймворк 4.0, но не будет компилироваться при ссылке на один класс Project.

Как только я установил пакет Async NuGet на второй проект, он скомпилировался нормально.

4 голосов
/ 17 августа 2016

У меня была похожая проблема: компилятору не удалось обнаружить папку внутри того же проекта , поэтому директива using, ссылающаяся на эту папку, вызвала ошибку. В моем случае проблема возникла из-за переименования папки . Несмотря на то, что я обновил пространство имен всех классов в этой папке, информация о проекте почему-то не удалось обновить. Я перепробовал все: удаление файла .suo и папок bin и obj, очистка решения, перезагрузка проекта - ничего не помогло. Я решил проблему, удалив папку и классы внутри нее, создав новую папку и создав новые классы в этой новой папке (простое перемещение классов внутри новой папки не помогло).

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

4 голосов
/ 03 августа 2012

Этот работал для меня. В вашем классе, где определено имя класса, например: Открытый класс ABC, удалите один символ и немного подождите. Ваш список ошибок увеличится, потому что вы изменили имя. Теперь верните символ, который вы ввели. Это сработало для меня, надеюсь, это сработает и для вас. Удачи !!!

2 голосов
/ 06 декабря 2017

У меня была та же проблема, что и обсуждалась: VS 2017 подчеркивает класс в ссылочном проекте как ошибку, но решение работает нормально, и даже intellisense работает.

Вот как мне удалось решить эту проблему:

  1. Выгрузить указанный проект
  2. Откройте файл .proj в VS (я искал дубликаты, как кто-то предложил здесь)
  3. Снова перезагрузите проект (я не изменил и даже не сохранил файл proj, так как у меня не было дубликатов)
2 голосов
/ 12 апреля 2012

У нас был странный случай, который я только что исправил в решении. Перед оператором «использование» в основном проекте был скрытый / пробельный символ. Этот проект будет хорошо работать, и веб-сайт будет работать нормально, но проект модульного тестирования, который ссылается на него, не может быть построен.

...