Тип или пространство имен <blah>не существует - PullRequest
23 голосов
/ 02 июля 2011

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

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

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

using A;
using B;

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

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

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

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

Вот ошибки, которые я получаю. Есть 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">

Это не компилируется, это ПРЕДУПРЕЖДАЕТ, что не может найти ссылочный проект, тогда происходят все эти ОШИБКИ. Но затем я изменяю ProjectReference на следующее:

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

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

Ответы [ 11 ]

21 голосов
/ 03 июля 2011

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

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

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

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

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

12 голосов
/ 02 июля 2011

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

9 голосов
/ 07 ноября 2014

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

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

7 голосов
/ 08 января 2016

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

1 голос
/ 19 сентября 2018

После многих часов разочарования я обнаружил следующий процесс для решения этой проблемы с помощью решения VS2017:

Insure that all reference assemblies have been recognized and have current properties.

If assemblies do not show proper reference, right click the entry
and view properties.  This action often resets the reference. This
action must be completed for each project in the solution.

After resolving all references, if the error continues, delete the
following:

        -The Obj folder

        -The Bin folder

        -Reference to the offending assembly

        -Clean and Rebuild the solution.  Errors should occur.

        -Re-reference the needed assembly.

The editor should no longer show the namespace error and build should succeed.
1 голос
/ 08 июля 2015

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

1 голос
/ 02 июля 2011

По сути, это звучит как отсутствующая ссылка.

Некоторые проверки работоспособности, о которых я могу подумать:

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

Редактировать

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

0 голосов
/ 04 октября 2017

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

0 голосов
/ 26 августа 2016

Я решил это, используя global::[namespace][type I want to use] в C # 6.0

0 голосов
/ 07 июня 2016

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

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

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