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

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

Затем у меня есть другой проект веб-сайта за пределами решения, которому необходимо ссылаться на библиотеку классов. Я нажимаю правой кнопкой мыши папку "Бин" или "Проект" и выбираю "Добавить ссылку", а затем выбираю "Проект библиотеки классов", добавляет 15 или около того DLL, которые библиотека классов должна иметь в папке bin для веб-сайтов, но ни один из файлов .cs не распознает операторы using.

using MyLibrary.MyFolder;

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

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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

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

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

Ответ 7

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

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

Ответ 8

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

enter image description here

Ответ 9

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

Ответ 10

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

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

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

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

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

например.

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

Декларация:

public class Massage
{
    //code here

}

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

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

Ответ 11

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

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

  • Я очистил решение.
  • Я вручную добавил ссылку на проект MVC.
  • Я вручную добавил директивы use.
  • Ctrl-Shift-B

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

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

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

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

Я прочитаю

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

Ответ 12

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

Если у вас есть сборка А, которая ссылается на сборку А, которая ссылается на не-проектную (внешнюю) сборку X и код А-кода, не будет распознавать, что вы ссылались на X, а затем выполните следующие шаги:/p >

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

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

Ответ 13

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

Ответ 14

Если использование TFS, выполнение Get latest (рекурсивный) не всегда работает. Вместо этого я принудительно беру последнюю версию, нажав кнопку "Источник" = "Получить определенную версию", а затем щелкнув оба поля. Это имеет тенденцию работать.

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

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

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

Ответ 15

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

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

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

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

Ответ 16

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

Ответ 17

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

enter image description here

Ответ 18

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

Ответ 19

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

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

Ответ 20

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

Щелкните правой кнопкой мыши библиотеку классов, в которую вы хотите импортировать (которая содержит несколько импортированных библиотек классов), → Add-> Ссылка (выберите Projects-> Solution-> выберите библиотеку классов, которую вы хотите импортировать from-> ХОРОШО)