Подтвердить что ты не робот

Тип или пространство имен <blah> не существует

Хорошо, у меня был этот миллион раз раньше, и на него ответили 1 миллион +1 раз раньше.

И все же, еще раз. У меня есть 3 проекта, A, B и C, каждая из которых является DLL. Каждый проект -.Net 4.0 (а не сборка клиента, полная версия 4.0). Project C ссылается на A и B. На них ссылаются как на проекты, а на выходе устанавливается локальное копирование.

В C у меня есть два оператора using в файле .cs:

using A;
using B;

Когда я компилирую, я получаю жалобу, которая не может найти B. A в порядке. B зависит от A.

Что я должен делать? Я удалил и снова добавил, закрыл VS2010, снова открыл его, посмотрел файл .csproj. И я просто не могу это получить. Опять же, в миллионный раз.

Кто-то, пожалуйста, похлопываешь меня настолько, что я узнаю источник этого раз и навсегда!

И да, это, вероятно, ответит где-то в StackOverflow, но ни в одном из лучших ответов, которые я проверил до сих пор. Сроки слишком общие, чтобы быть полезными, слишком много вопросов, где ответ "duh, добавьте ссылку". Я прошел мимо этого пункта.

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

Error   130 'AWI.WWG.EXPMRI.MriUpload.Data.MriUpload' does not contain a definition for 'Database' and no extension method 'Database' accepting a first argument of type 'AWI.WWG.EXPMRI.MriUpload.Data.MriUpload' could be found (are you missing a using directive or an assembly reference?) 

Error   114 'object' does not contain a definition for <blah>

Error   59  The type or namespace name '<blah>' could not be found (are you missing a using directive or an assembly reference?)    

Ага Я посмотрел на предупреждения, а не только на ошибки, и вот что я вижу:

Warning 69  The referenced project '..\..\..\..\..\..\..\Partners\integration\framework\connectors\Partners.Connectors.Base\Partners.Connectors.Base\Partners.Connectors.Base.2010.csproj' does not exist.  AWI.WWG.EXPMRI.MriUpload.Objects

Этот файл .csproj является "B" в этом случае. Несмотря на то, что я удаляю и повторно добавляю ссылку на проект, я получаю это. Но мне кажется, что я приближаюсь!

Хм, я просто нашел другую DLL, назову ее "D", которая ссылается на "A". Когда я добавляю его в проект, я начинаю жалобу:

----------------
The  Add Reference Dialog could not be shown due to the error:

The specified path, file name, or both are too long.  The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
----------------

Может ли это быть связано или просто другое отвлечение?


Хорошо, я нашел проблему, хотя я ее не понимаю.

Когда я добавляю ссылку через IDE, она добавляет это в файл csproj из "C":

<ProjectReference Include="..\..\..\..\..\..\..\Partners\integration\framework\connectors\Partners.Connectors.Base\Partners.Connectors.Base\Partners.Connectors.Base.2010.csproj">

Это не компилируется, WARNS, что он не может найти проект, на который ссылается, тогда все эти ERROR происходят. Но затем я меняю ProjectReference на следующее:

<ProjectReference Include="C:\...\Partners.Connectors.Base.2010.csproj">

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

4b9b3361

Ответ 1

Решение связано с ограничениями на пути к файлу в Windows, и они так же, как IDE переводит относительные пути в полные, как описано в в этом блоге.

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

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

Если другая ссылка исчезнет, ​​вот ссылка на статью MS. http://support.microsoft.com/kb/2516078

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

Ответ 2

Я бы удостоверился, что ваш проект включил ссылки на сборки.

enter image description here

Я бы проверял, что порядок сборки соответствует вашим зависимостям

enter image description here

Наконец, если все настроено правильно, вы должны увидеть следующий порядок сборки:

enter image description here

Не похоже, что это ваша проблема, но для полноты я должен добавить, что еще одна вещь, которую нужно проверить (если ваш проект нацелен на .NET Framework 3.5 или выше) заключается в том, что Target Framework для обоих проектов соответствует. Если вы связываете то, что нацелено на профиль клиента из полной версии Framework, вы также получите ошибку "не найден":

enter image description here

Ответ 3

Перейдите в раздел предупреждения и разрешите все предупреждения, и все будет готово...

В разделе предупреждений вы узнаете, какие все внутренние зависимости dlls необходимы для проекта, на который вы ссылаетесь.

Ответ 4

Я знаю, что это не ответ на вашу проблему, но ошибка очень похожа, когда вы пытаетесь ссылаться на проект с более высокой версией .net, чем тот, который вы используете. IE: вы не можете ссылаться на .net 4.5 из .net 3.5

Ответ 5

В принципе, это звучит как недостающая ссылка.

Некоторые проверки здравомыслия, о которых я могу думать, следующие:

  • Вы уверены, что проект, который генерирует ошибку, является C?
  • Вы уверены, что не используете орфографическую ошибку в пространстве имен B при использовании?
  • Может ли быть некоторая ошибка компиляции в B перед компиляцией C? (Это может привести к тому, что компилятор не сможет найти пространство имен в B).
  • Есть ли у вас какая-либо другая ошибка компиляции или предупреждение?

Edit

Другое предложение: класс в сборке B, определенный как public?

Ответ 6

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

Ответ 7

Создайте чистый проект и проверьте минимальные наборы сборок, которые вы используете в своем проекте. Таким образом, вы будете уверены, что в вашем решении есть что-то плохое или если у недавно созданного проекта такие же симптомы. Если да, то возможно VS,.net и т.д. Поврежден или что-то в этом роде.

Ответ 8

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

Я решил это, перейдя в Solution = > properties = > зависимые от проекта, и все зависимости были отключены для двух проектов, для которых я получал ошибку пространства имен. Я проверил флажки и перестроил решение без ошибок.

Ответ 9

Я решил это с помощью global::[namespace][type I want to use] в С# 6.0

Ответ 10

С VS2017 эта проблема возникла для меня, когда проект в моем решении был выгружен.