Почему я не могу сослаться на мою библиотеку классов? - PullRequest
86 голосов
/ 09 февраля 2010

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

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

using MyLibrary.MyFolder;

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

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

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

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

Ответы [ 20 ]

157 голосов
/ 01 июня 2012

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

85 голосов
/ 09 февраля 2010

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

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

Что действительно работало, так это открытие проекта в Visual Studio, закрытие всех открытых вкладок и затем закрытие его.

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

31 голосов
/ 29 апреля 2015

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

8 голосов
/ 31 января 2013

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

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

4 голосов
/ 08 июля 2010

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

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

3 голосов
/ 09 февраля 2010

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

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

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

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

2 голосов
/ 28 марта 2012

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

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

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

enter image description here

2 голосов
/ 09 февраля 2010

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

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

2 голосов
/ 11 августа 2015

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

Все безрезультатно .... До!

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

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

Так как ошибка была в начале названия, она не появлялась в списке классов intellisense, когда я начал печатать.

например.

Имя класса: Message.cs

Декларация:

public class Massage
{
    //code here

}

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

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

...