Чому я не можу посилатися на свою бібліотеку класів?


86

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

Потім у мене є інший проект веб-сайту поза рішенням, який повинен посилатися на бібліотеку класів. Я клацаю правою кнопкою миші папку Bin або проект і вибираю Додати посилання, а потім вибираю мій проект бібліотеки класів, він додає 15 або близько того бібліотеки DLL, які потрібні бібліотеці класів, до папки bin веб-сайтів, але жоден із файлів .cs не розпізнає оператори використання.

using MyLibrary.MyFolder;

Там сказано, що він не може вирішити це, а ReSharper просто каже, що його можна безпечно видалити, оскільки він не використовується.

ReSharper може визнати, що йому потрібні посилання, і пропонує "Посилатися на MyLibrary і використовувати MyFolder". Я не впевнений, чому пропонується додати посилання, яке я вже маю. Коли я йду з пропозицією, я отримую помилку

"Помилка посилання на модуль. Можливо, посилання створить кругові залежності між проектами."

Я намагався зайти на сторінки властивостей веб-сайтів, видалити всі посилання та повторно їх додати, але це дає ті самі помилки. Будь-які ідеї, чому це не працює?


Перевірте версію фреймворка .net у бібліотеці класів та проект, на який ви посилаєтесь
Manideep Innamuri

Відповіді:


164

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


3
Слава! Я будував своє рішення як 4.5 і пов'язував його з 4.0. Зважаючи на нашу поточну вимогу 4.0, я знизив нове рішення до версії 4.0, і тепер мій інший проект не має жодних проблем для створення. +1 за допомогу мені залишатись здоровим!
Девід Петерсон,

1
Я подолав стільки попередніх перешкод цим проектом, збирався кинути рушник, коли отримав цю помилку. Ви врятували його, дякую!
Tony D

1
Не очікував, що таким чином проблема вирішиться! Крутий
енуф

1
Тоді корпорація Майкрософт повинна сказати це і включити опцію розміщення їх усіх в одній версії.
PRMan

1
Врятував мій день! VisualStudio навіть не підніме попередження, що нагадує мені про це :(
Реуель Рібейро,

86

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

Я спробував звичайне очищення проектів і відновлення, вимкнувши всі свої екземпляри Visual Studio і перезапустивши їх, навіть спробував перезапустити комп’ютер.

Що насправді спрацювало, це відкриття проекту у Visual Studio, закриття всіх відкритих вкладок, а потім його вимкнення.

До того, як я залишив вкладки відкритими, оскільки я не вважав, що це має значення (і я навряд чи колись закриваю вкладки, якими я користуюся).


Просто перезапуск VS працював у мене. Причиною цієї проблеми було перероблення імені проекту / простору імен, що викликало помилку в R #.
mbx

Це спрацювало і на мене. Я закрив усі вкладки, як ви сказали, а потім перезапустив мою IDE і вуаля, я зараз можу звернутися до своєї бібліотеки класів. Дякую.
юва

31

Одна з можливостей полягає в тому, що цільова версія .NET Framework бібліотеки класів є вищою, ніж версія проекту.


8

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

Інструменти-> Параметри-> Перезмінювач-> Параметри-> Загальні-> натисніть кнопку очистити кеші та перезапустіть VS


4

У мене були подібні проблеми, коли інколи VS будував, а іноді ні. Після деяких пошуків та спроб я виявив, що маю неоднозначне посилання на клас з однаковим іменем у різних бібліотеках ('FileManager'). Проектом, який не будувався, були мої Unit Tests, які посилаються на всі модулі мого рішення. Застосування посилання на конкретний модуль для мене все розібрало.

Я хочу сказати: замість того, щоб звинувачувати 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. Я видалив проект. очистив розчин і знову додав проект. це те, що мені вдалося.


У мене була та сама проблема, і це, здавалося, допомогло. Досить дивно.
неспокій

2

Якщо ви посилаєтесь на збірки для проектів, що знаходяться в одному і тому ж рішенні, додайте посилання на проект (за допомогою вкладки "Проекти"), а не переглядайте dll у папці \ bin \ Debug (або \ bin \ Release) (за допомогою Вкладка "Огляд"). Дивіться знімок екрана нижче. Переглядайте файл збірки / dll лише у тому випадку, якщо він вважається зовнішньою збіркою.

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


2

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


Я зробив це і отримав, що мій інтелект-сенс знову показує інформацію про збірку, але як тільки я спробував перекомпілювати, моя інформація про інтелектуальний сенс для цієї збірки була стерта, і збірка не вдалася. Це одна дивна помилка!
Девід Петерсон,

Мені також довелося відтворити свій проект з нуля ... думаю, я зробив кілька-багато видалень / інсталяцій у NuGet на відносно свіжому проекті.
Адам Нофсінгер

Видалення та відтворення посилань працювало у мене, видалення повного файлу проекту може бути надмірним.
мандрівник

2

У мене була ця проблема. Мені потрібні були віки, щоб зрозуміти. У мене були люди через плече, щоб допомогти. Ми відновили, очистили та перезапустили Visual studio, і це не виправило. Ми видалили та повторно додали посилання ...

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

Рішенням моєї проблеми було те, що моє оголошення класу було написано неправильно.

Перш ніж почати суворо судити мене, дозвольте мені пояснити, чому це не було дурнем, а також чому цю помилку можуть зробити навіть найрозумніші програмісти.

Оскільки помилка була на початку в назві, вона не з'являлася в списку класів intellisense, коли я починав друкувати.

напр

Назва класу: Message.cs

Декларація:

public class Massage
{
    //code here

}

На перший погляд і невеликим шрифтом Масаж виглядає ідентично Повідомленню.

Набравши M, було вказано занадто багато класів, тому я набрав e, яке не відображалося у помилково набраній версії, що створювало враження, що клас не був підібраний компілятором.


Отже, по суті, ви мали помилку. Це насправді не корисно для інших.
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

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

Я буду читати

Помилка посилання на модуль. Можливо, посилання створюватиме циклічні залежності між проектами, або вам бракує деяких посилань на залежності залежностей посилання.


0

Ще одне можливе виправлення, яке щойно спрацювало у мене:

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

  • Викиньте посилання на X з обох A і B
  • Відтворіть посилання на X у B
  • Відтворіть посилання на X в A

Очевидно, VS не розпізнає посилання на зовнішню збірку в проекті, яка є залежністю іншого проекту, який вже посилається на зовнішній. Повторно встановлюючи посилання з нуля, ви долаєте це. Це просто дуже дивно.


Цікаво, але вірно на VS2015. Дякую!
Скотт Німрод

0

Я зіткнувся з цією проблемою і вирішив її, закривши візуальну студію, відкривши візуальну студію, очистивши та відновивши рішення. Це спрацювало для мене.


0

Якщо ви використовуєте TFS, виконання програми Get latest (рекурсивне) не завжди працює. Натомість я примушую отримувати останню версію, натискаючи Source control => Get specific version та клацнувши обидва поля. Це, як правило, працює.

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

Якщо це все одно не працює, видалення файлу suo (як правило, знаходиться там же, де і рішення) змушує Visual Studio отримувати всі файли з джерела (і згодом відновлювати файл suo).

Якщо це не спрацює, спробуйте закрити всі відкриті файли та закрити Visual studio. При наступному відкритті Visual Studio це слід виправити. Існує помилка перезавантаження, яка вирішується таким чином.


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 C #> бібліотеку класів . І ця нещодавно додана бібліотека класів є правильною, і тепер її можна додати як посилання на будь-який проект.


-4

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

Клацніть правою кнопкою миші бібліотеку класів, в яку ви хочете імпортувати (що містить кілька імпортованих бібліотек класів), -> Додати-> Посилання (Виберіть проекти-> Рішення-> виберіть бібліотеку класів, з якої потрібно імпортувати-> ОК)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.