Чому я отримую значок попередження, коли додаю посилання на проект плагінів MEF?


321

Я хочу протестувати основний клас плагіна, прямо посилаючись на проект плагіна та інстанціюючи клас плагіна. Коли я створюю тестовий проект програми Console App і додаю посилання на проект до плагіна, я отримую попереджувальний значок (жовтий трикутник із знаком оклику) поруч із посиланням у списку літератури.

Коли я замість цього додаю посилання на dll, збірник виводить плагін, я не отримую такого попередження. Що міг би це попередження намагатися сказати мені?


8
Здебільшого у трикутниках із попередженнями з’являться підказки інструментів або (якщо цього не відбувається) запис у вікні помилок. Як здогадуються, два проекти мають несумісні залежності.
Damien_The_Unbeliever

2
Будь-які застереження в консолі при спробі побудови?
Jite

231
Я бачив це з проектами , орієнтованих на різні .net framwork версії
mhand

4
@OP Ви можете вибрати відповідь kad81 як правильну
Енді,

5
Це мене завжди отримує. Додавання нового проекту до рішення .NET 4 та за замовчуванням 4,5.
Робін Френч

Відповіді:


674

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


13
Що я також повинен знати, чому візуальна студія прийняла додавати ці посилання тоді?
Андерс Лінден

16
Я використовую VS 2015, і проблема все ще існує. Я втратив півгодини, поки не приїхав сюди.
Еліссон

14
навіть немає наведення курсору на текст або помилки побудови, що пояснюють, у чому проблема
matao

6
Можна підтвердити, що це було корінь проблеми. Також можна підтвердити, що Visual Studio 2017 з оновленням 15.3 досі не вирішив питання про те, що насправді не відображається змістовне повідомлення. Дуже дратує.
Грег Р Тейлор

4
@matao Погодився! Це дратує, я не міг отримати жодних деталей про помилку ...
nterry

74

Зустрічав той самий випуск із веб-програмою ASP.Net та двома проектами бібліотечного класу, на які потрібно було посилатись у веб-додатку. У мене не було інформації про те, чому збірка не вдалася і посилання були недійсними.

Рішення полягало у тому, щоб усі проекти мали однакові цільові рамки:

У Visual Studio 2015 - клацніть правою кнопкою миші проект> Властивості> Застосування> Цільова рамка

Зберегти, очистити та відновити рішення. Посилання на проекти більше не повинні відображатись як жовті попередження, і рішення збирається.

Мій веб-додаток орієнтувався на .Net 4.5, тоді як інші два залежні проекти бібліотечного класу націлені .Net v4.5.2


44

Для обох (або всіх) проектів, які ви хочете використовувати разом:

Клацніть правою кнопкою миші на проект> Властивості> Застосування> Цільова рамка .NET

Переконайтесь, що обидва (або всі) ваші проекти використовують однакову версію .NET Framework.


Ідеально, працювали для мене! У мене був проект MVC з .NET Framework 4.5.2. І мої бібліотеки класів, які посилаються на це, були .NET Framework 4.7.
Майк Апджон

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

38
  1. Переконайтесь, що всі версії однакові для кожного проекту, натисніть на кожен проект та перегляньте його версію Проект> Властивості> Застосування> Цільова рамка .NET
  2. а. Перейдіть до Інструменти> Nuget Package Manager> Тип консолі диспетчера пакунків Update-Package -Reinstall (якщо не працює, перейдіть до 2.b )

    б. Це критично, але НАЙБІЛЬШЕ МОЖЛИВОСТІ, ЩО РОБИТЬСЯ . Видаліть <Ціль> Можливо, з кількома рядками </ Ціль> зазвичай знаходяться в нижній частині .csproj.

  3. Збережіть, завантажте та складіть рішення.


1
Дякую за це, приємне повідомлення про помилку у Visual Studio про .Net версії тут не збиваються!
колмед

1
@colmde цікаво, якщо ви очищаєте рішення, у вікні виводу з'являється таке повідомлення: "Пакет відновлено, використовуючи .NetFramework XXX замість цільового фрейму. NetFramework XXX. Пакет може бути не повністю сумісним з вашим проектом '
elszeus

1
Частина 2.b, яка не була відзначена в інших відповідях, була для мене критичною! 2.b Видалити <Ціль> Можливо, з кількома рядками </ Target> зазвичай знаходяться в нижній частині .csproj.
shelbypereira

1
Частина 2.b абсолютно божевільна, але вона працює! дякую
Elo

1
Спасибі 2.b зробив трюк і для мене. Ніколи б я сам не з'ясував цього.
Генрік Клаузен

23

Перевстановіть усі пакети у всі проекти поточного рішення:

Update-Package -Reinstall

2
Хоча ця пропозиція безпосередньо не вирішила мою проблему, вона спрямовувала мене в правильному напрямку для мого сценарію. Для тих, хто це може допомогти, я фактично повинен був змінити своє джерело NuGet пакету на v3 для Update-Package, щоб знайти потрібну версію для завантаження: docs.nuget.org/consume/package-manager-dialog#package-sources
Джон Лі

1
Він видалив усі пакунки, встановив їх і повернулися жовті трикутники.
Андерс Лінден

8

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


5

Перевірте NETFramework згаданого DLL та проекту, куди ви додаєте DLL. Наприклад: DLL ==> підтримується версія запуску = "v4.0" Project ==> підтримується версіяRuntime = "v3.0"

Ви отримаєте значок попередження. Рішення. Зробіть консистенцію версії dll поперек.


5

Для мене я зіткнувся з цим питанням, посилаючись на бібліотеку класів .NET Standard 2.0 в консольній програмі .NET Framework 4.7.1. Так, рамки різні, але вони сумісні (.NET Standard повинен поєднуватися як з .NET Core, так і з .NET Framework.) Я намагався очищати, відновлювати, видаляти та читати посилання на проект тощо ... без успіху . Нарешті, вихід із Visual Studio та повторне відкриття вирішили проблему.


4

З даного питання було давно, але якщо когось все-таки цікавить - я нещодавно натрапив на подібні іконки. Я складав проект C # .net за допомогою VS 2008. Я виявив, що VS не міг знайти складання для цих посилань. Коли я двічі клацнув, VS оновив посилання та видалив піктограми на деяких із цих [EDIT: які він міг ЗАРАЗ знайти]. Для решти посилань мені довелося скласти відповідні збірки.


4

Додавши 2 центи до відповіді @ kad81,

Перейдіть у Visual Studio -> BUILD -> Менеджер конфігурацій

У спадному меню «Платформа активного рішення» у верхньому правому куті (мій - VS 2012), якщо це «Змішані платформи», змініть його на відповідну платформу на основі ваших довідкових сторонніх зборів.

Потім у кожному з проектів у списку переконайтесь, що ви вибрали однакову платформу для всього проекту. (якщо x86 не існує, виберіть "", тоді ви можете вибрати "x86".)

Спочатку відбудуйте бібліотечні проекти, а потім посилайтесь на проекти. Сподіваюсь, це допомагає.


4

Спробуйте закрити та відкрити VS.

Здається, нерозумно, але через 1 годину слідування вищесказаного та знаходження все в порядку. Я перезапустив VS 2017 і проблем не було.


1
Працювали для мене. Дурне чи ні іноді, Visual Studio плутається, і кеш-пам'ять викручується. Дякую за те, що я запропонував це - ненавиджу це робити, тому що я почувався дурним, думаючи, що це спрацює, але що "чорт" - після години інших речей я міг би так само і тада це спрацював
Блейк

2

У ядрі Asp.net колись він показує попередження, якщо ви зміните простір або ім'я проекту. Щоб видалити сповіщення такого типу, просто вивантажте проект та завантажте його ще раз. Якщо проблема все ще існує, це означає, що ви не можете знайти посилання на вашу асамблею.


1

У мене були ці ікони з іншої причини. У нас є одне велике рішення для всіх наших проектів (майже 100). Я зробив підбір проектів, які мене зацікавили, і прийняв нове рішення. Однак посилання, де посилання на проект замість посилань на зібрані файли dll ....

Після деяких досліджень я знайшов це посилання на GitHub, яке пояснює, що це нова поведінка у VS2015.

На сторінці GitHub вони пояснюють рішення для перетворення посилань проекту на бінарні посилання.


1

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

У будь-якому випадку, я вважаю, що проблема занадто широка і може бути викликана різними факторами , тому хочу поділитися своєю ситуацією / рішенням.

У мене був проект (принесений замовником) з бібліотеками Xamarin Forms та Telerik. Річ взагалі була пов'язана з компонентами, які бібліотеки не входять до папки пакунків, а також доступні через Nuget (платних).

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

Рішення було просто видалити це Telerik посилання ( в тому числі кількох елементів управління в коді , які з допомогою цього). Одразу після цього всі посилання магічно отримали звичайний сірий колір, і помилки (в основному) зникли.

"В основному" - тому що "все червоне навколо" повідомлення про помилки про "елемент ніде не визначено" іноді трапляються все-таки. Це дивно, і доставляє незручності, але я все ще в змозі скласти та запустити проект (и): просто потрібно очистити рішення, перезапустити Visual Studio, трохи помолитися, очистити знову, видалити папки obj / bin, перезапустити знову, і це працює добре.

Головне - видалити недоступні бібліотечні посилання , оскільки повідомлення про помилки говорять зовсім про інші речі. (Наприклад, щось на кшталт "Xamarin.Build.Download.XamarinDownloadArchives не знайдено або щось неможливо знайти" тощо), але це може означати, що у вас немає посилань.

Потім видаліть папку пакунків, перезавантажте / повторно відкрийте проект / рішення, перейдіть до "Manage Nuget Packages" та натисніть кнопку "Відновити".


1

Використовуючи Visual Studio 2019 для всіх проектів, орієнтованих на .Net Core 3.1, рішення було:

  1. Очистити / побудувати / відновити.
  2. Перезапустіть Visual Studio 2019

0

Я також зіткнувся з тією ж проблемою, але мій випадок був трохи іншим, ніж вище. Я намагався відкрити проект, створений на іншому комп’ютері. Я виявив, що шлях до папки пакунків не оновлюється, коли ви додаєте посилання, тому перезапуск VS, зміна версії .NET або будь-яка згадана рекомендація не вирішує проблему. Я відкрив файл csproj у блокноті ++ та виправив усі відносні шляхи до папки пакунків. Тоді; всі попередження пропали. Сподіваюся, це допомагає.



0

Дякую всім за допомогу. Ось розбивка того, як я виправив свою проблему:

Клацніть правою кнопкою миші на вашому проекті> Властивості

Під програмою змініть цільову рамку. У моєму випадку ImageSharp використовував .Net 4.6.1. Ви можете знайти це у своїх пакетах.config.

Перейдіть до посилань на ваш проект. Ви помітите, що у SixLabors є жовтий трикутник. Вам потрібно оновити пакет NuGet.

Клацніть правою кнопкою миші посилання Список літератури> Керування пакетами NuGet.

Оновіть SixLabors.

У вас можуть бути невеликі оновлення коду (див. Нижче), але це вирішило мою проблему.

Перетворити ImageSharp.Image в ImageSharp.PixelFormats.Rgba32?


0

У Visual Studio 2019 один із моїх цільових рамок проектів був ядром .net, але він посилався на інший проект, цільовою основою якого був стандарт .net. Я змінив усі проекти на посилання на .net стандарт, і піктограми пішли. Щоб побачити, що ваш проект, клацніть правою кнопкою миші та натисніть властивості та подивіться на цільову рамку. Ви також можете звичайно натиснути на сам проект і подивитися тег <TargetFramework> під <PropertiesGroup>


0

У багатопроектному рішенні, Якщо будь-яка інша річ не вдалася ... У проекті startUp поставте прапорець. Залежності-> Збори та побачте, чи є проект, на який посилаються помилки. Видаліть його та відновіть його знову.

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