Почему я не могу ссылаться на свою библиотеку классов?

86

У меня есть решение, которое содержит веб-сайт и библиотеку классов в Visual Studio 2008.

Затем у меня есть еще один проект веб-сайта вне решения, который должен ссылаться на библиотеку классов. Я щелкаю правой кнопкой мыши папку Bin или Project и выбираю Add Reference, затем выбираю свой проект библиотеки классов, он добавляет около 15 DLL, необходимых библиотеке классов, в папку bin веб-сайтов, но ни один из файлов .cs не распознает операторы using.

using MyLibrary.MyFolder;

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

ReSharper может распознать, что ему нужна ссылка, и предлагает «сослаться на MyLibrary и использовать MyFolder». Я не уверен, почему он предлагает добавить ссылку, которая у меня уже есть. Когда я предлагаю предложение, я получаю сообщение об ошибке

«Не удалось ссылаться на модуль. Вероятно, ссылка приведет к циклическим зависимостям между проектами».

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

Брэндон
источник
Проверьте версию
.NET

Ответы:

164

Также убедитесь, что проекты нового решения работают в соответствии с фреймворком, совместимым с проектом, который вы пытаетесь включить. Я пытался включить ссылку на проект 4.0 в проект 3.5.

CindyH
источник
3
Престижность! Я создавал свое решение как 4.5 и связывал его с 4.0. Из-за нашего текущего требования 4.0 я понизил новое решение до 4.0, и теперь у моего другого проекта нет проблем с его построением. +1 за то, что помогал мне оставаться в здравом уме!
Дэвид Петерсон
1
Я преодолел так много предыдущих препятствий с этим проектом, я уже собирался бросить полотенце, когда я получил эту ошибку. Вы сохранили его, спасибо!
Тони Ди,
1
Не ожидал, что так решится проблема! Cool enuf
Irfaan
1
Тогда Microsoft должна сказать это и включить возможность разместить их всех в одной версии.
PRMan
1
Спас мой день! VisualStudio даже не поднимал тревогу, напоминая мне об этом :(
Руэл Рибейро,
86

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

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

На самом деле сработало открытие проекта в Visual Studio, закрытие всех открытых вкладок, а затем его закрытие.

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

Брэндон
источник
Просто перезапуск VS работал у меня. Причиной этой проблемы был рефакторинг переименования проекта / пространства имен, вызвавший ошибку в R #.
mbx
У меня это тоже сработало. Я закрыл все вкладки, как вы сказали, а затем перезапустил свою IDE и вуаля, теперь я могу ссылаться на свою библиотеку классов. Спасибо.
Юво
31

Одна из возможностей заключается в том, что целевая версия библиотеки классов .NET Framework выше, чем версия проекта.

user4847434
источник
8

У меня была аналогичная проблема, будут ли все мои ссылки ошибаться Resharper - Решение, которое сработало для меня, - очистить кеш Resharper, а затем перезапустить VS

tools-> options-> resharper-> options-> general-> нажмите кнопку очистки кешей и перезапустите VS

Рокки
источник
4

У меня были похожие проблемы, когда VS иногда строил, а иногда нет. После некоторых поисков и попыток я обнаружил, что у меня есть неоднозначная ссылка на класс с тем же именем в разных библиотеках (FileManager). Проект, который не удалось собрать, - это мои модульные тесты, которые ссылаются на все модули в моем решении. Применение ссылки на конкретный модуль помогло мне разобраться.

Моя точка зрения: вместо того, чтобы обвинять ReSharper или VS, может быть хорошей идеей дважды проверить, действительно ли каким-то образом нет какой-то круговой ссылки. Чаще всего классы с одинаковыми именами в разных модулях могут вызывать путаницу и часто являются признаком плохого дизайна (как в моем случае).

Федор Стиман
источник
+1 в моем случае два проекта с разными пространствами имен были скомпилированы в .exe с тем же именем (имя сборки на вкладке «Приложение» в Visual Studio) - из-за проекта миграции это имеет (некоторый) смысл; MSBuild из командной строки дали нам один не очень полезный ключ , который оставил нам интересно на некоторое время: The type or namespace name 'A' does not exist in the namespace 'B'. Обратите внимание, что никаких предупреждений по этому
поводу нет
3

Это похоже на аналогичную проблему с ReSharper:

http://www.jetbrains.net/devnet/thread/275827

По словам одного пользователя в потоке, принудительная сборка устраняет проблему (CTRL + Shift + B) после первой сборки.

Похоже, проблема с ReSharper конкретно в их случае. Вы пробовали строить, несмотря на предупреждения и возможные ложные ошибки?

КП.
источник
Я сталкивался с этим раньше. И я не уверен, что сборка «решила» проблему. Он компилируется, но по-прежнему показывает классы, используя операторы, классы и т. Д. Как нераспознанные. Однако, если я намеренно прерываю вызов какого-либо метода, Visual Studio, кажется, распознает ошибку, даже если она не показывает мне список параметров. Думаю, это вина ReSharpers.
Брэндон,
3

Поскольку они оба находятся в одном решении, вместо добавления ссылки на DLL добавьте ссылку на сам проект библиотеки классов (в диалоговом окне «Добавить ссылку» будет вкладка для этого).

Ах, это другое решение. Пропустил. Как насчет того, чтобы вместо добавления ссылки на проект добавить ссылку на скомпилированную DLL вашей библиотеки классов. В диалоговом окне «Добавить ссылку» есть вкладка «Обзор», которая делает это.

Вилкс-
источник
1
Это сработало для меня, другие решения предлагали добавить ссылку, но по какой-то причине я не нашел ее, пока не щелкнул правой кнопкой мыши основной проект в проводнике решений.
Ральфарама
3

После подтверждения использовалась та же версия asp.net. Я удалил проект. очистил решение и повторно добавил проект. это то, что сработало для меня.

Дэвид
источник
У меня была такая же проблема, и это, похоже, помогло. Довольно странно.
excitus
2

Если вы ссылаетесь на сборки для проектов, которые находятся в одном решении, добавьте ссылку на проект (с помощью вкладки «Проекты»), а не просматривайте dll в папке \ bin \ Debug (или \ bin \ Release) (используя Вкладка «Обзор»). См. Снимок экрана ниже. Просматривайте файл сборки / dll, только если он считается внешней сборкой.

введите описание изображения здесь

МакГайвер
источник
2

Я удалил * .csproj.user (файл resharper) своего проекта, затем закрыл все вкладки и снова открыл его. После этого я смог скомпилировать свой проект, и предупреждений resharper не было.

Alex
источник
Я сделал это, и мое интеллектуальное восприятие снова показало информацию о сборке, но как только я попытался перекомпилировать, моя интеллектуальная информация для этой сборки была стерта, и сборка не удалась. Это одна странная ошибка!
Дэвид Петерсон
Мне также пришлось воссоздать свой проект с нуля ... думаю, я сделал несколько удалений / установок в NuGet на относительно новом проекте.
Адам Нофсингер
У меня сработало удаление и воссоздание ссылок, полное удаление файла проекта может быть излишним.
danjuggler 08
2

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

Все без толку .... Пока!

Решение моей проблемы заключалось в том, что объявление моего класса было написано неправильно.

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

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

например

Название класса: Message.cs

Декларация:

public class Massage
{
    //code here

}

На первый взгляд и мелким шрифтом Massage выглядит идентично Message.

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

WonderWorker
источник
Значит, у вас была опечатка. Это не очень полезно для других.
TylerH
0

У меня была аналогичная проблема в VS 2010 при создании тестового проекта для приложения MVC 2. Симптомы были идентичны.

Сообщение от ReSharper несколько вводило в заблуждение. На мгновение я полностью проигнорировал ReSharper и сделал это «ручным способом VS»:

  1. Очистил раствором.
  2. Я вручную добавил ссылку на проект MVC.
  3. Я вручную добавил директивы using.
  4. ctrl-shift-b

На этом этапе я получил ошибку компиляции: я должен был сослаться на System.Web.Mvcсборку в моем тестовом проекте (вздох). Добавление этой ссылки вызывает компиляцию проекта. Проблемы с ReSharper остаются, но средство запуска тестов ReSharper работает.

Когда я перезапускаю VS, ошибки ReSharper тоже исчезли. Я не уверен, требуется ли перезагрузка - может быть достаточно просто закрыть файл .cs.

С этого момента, когда я вижу сообщение ReSharper

Не удалось ссылаться на модуль. Возможно, ссылка создаст циклические зависимости между проектами.

Я буду читать

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

Marijn
источник
0

Еще одно возможное исправление, которое сработало для меня:

Если у вас есть сборка A, которая ссылается на сборку B, обе из которых ссылаются на непроектную (внешнюю) сборку X, и код сборки B не распознает, что вы ссылались на X, попробуйте выполнить следующие шаги по порядку:

  • Отбросьте ссылку на X из ОБЕИХ A и B
  • Восстановить ссылку на X в B
  • Восстановить ссылку на X в A

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

KeithS
источник
Интересно, но верно на VS2015. Благодарность!
Скотт Нимрод
0

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

Мухаммад Сохаил
источник
0

При использовании TFS выполнение Get latest (рекурсивно) не всегда работает. Вместо этого я принудительно загружаю последнюю версию, щелкнув Source control => Get specific version, а затем щелкнув оба поля. Это работает.

введите описание изображения здесь

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

Если это не сработает, попробуйте закрыть все открытые файлы и закрыть Visual Studio. Когда вы в следующий раз откроете Visual Studio, это должно быть исправлено. Таким образом устраняется ошибка resharper.

WonderWorker
источник
0

Недавно я столкнулся с подобной проблемой. Я работаю в Visual Studio 2015 с Resharper Ultimate 2016.1.2. Я пытался добавить новый класс в свою базу кода, пытаясь сослаться на класс из другой сборки, но Resharper выдает ошибку для этого пакета.

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

Добавление ключевого слова global :: перед требуемым пространством имен помогло мне сослаться на класс, который я действительно искал. Более подробную информацию об этом можно найти на странице, указанной ниже:

https://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx

просвет
источник
0

Если оба проекта содержатся в одном решении, будет более целесообразным, если вы добавите ссылку на нужный проект, а не его скомпилированную dll.

введите описание изображения здесь

Мануэль Ролдан
источник
-1

К сожалению, единственное, что сработало для меня, - это полное удаление и воссоздание проекта библиотеки классов после временного копирования файлов классов в другое место. Только тогда веб-проект ASP.Net распознает usingутверждения, относящиеся к проекту библиотеки классов. Это было с Visual Studio 2010, без использования ReSharper.

язвить
источник
-1

У меня была аналогичная проблема. Что сработало для меня, так это то, что я добавил неправильную библиотеку классов из визуальной студии . Я добавил с помощью функции поиска Visual Studio.

Что мне нужно было сделать, так это Добавить новый проект> Visual C #> Библиотека классов . И эта недавно добавленная библиотека классов является правильной и теперь может быть добавлена ​​в качестве ссылки в любой проект.

Мухаммад Рехан Кадри
источник
-4

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

Щелкните правой кнопкой мыши библиотеку классов, которую вы хотите импортировать (которая содержит несколько импортированных библиотек классов), -> Добавить-> Ссылка (выберите проекты-> Решение-> выберите библиотеку классов, из которой вы хотите импортировать-> ОК)

Кайл
источник