Почему при добавлении ссылки на проект плагина MEF появляется значок предупреждения?


321

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

Когда я вместо этого добавляю ссылку на dll, вывод сборки сборки плагина, я не получаю такого предупреждения. Что могло бы сказать это предупреждение?


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

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

231
Я видел это в проектах, нацеленных на разные версии .net framwork
mhand

4
@OP Не могли бы вы выбрать правильный ответ kad81
Энди,

5
Это всегда меня заводит. Добавление нового проекта в решение .NET 4 по умолчанию - 4.5.
Робин Френч

Ответы:


674

Как уже упоминалось в комментариях к вопросу, причиной могут быть разные версии .NET Framework между проектами. Проверьте свойства нового проекта и убедитесь, что другая версия по умолчанию не используется.


13
Что мне также нужно знать, так это почему Visual Studio тогда добавила эти ссылки?
Андерс Линден

16
Я использую VS 2015, и проблема все еще там. Я потерял полчаса, пока не пришел сюда.
Алиссон

14
нет даже текста при наведении или ошибок сборки, объясняющих, в чем проблема
matao

6
Могу подтвердить, что это было корнем проблемы. Можно также подтвердить, что Visual Studio 2017 с обновлением 15.3 до сих пор не устранил проблему не показа значимого сообщения. Очень надоедливый.
Грег Р. Тейлор,

4
@matao Согласен! Это раздражает, я не мог получить какие-либо подробности об ошибке ...
nterry

74

Обнаружена та же проблема с ASP.Net Web App и двумя проектами библиотечного класса, на которые нужно было ссылаться в Web App. У меня не было информации о том, почему сборка не удалась и ссылки были недействительными.

Решение заключалось в том, чтобы все проекты имели одинаковую целевую среду:

В Visual Studio 2015 - щелкните правой кнопкой мыши проект> Свойства> Приложение> Target Framework

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

Мое веб-приложение предназначалось для .Net 4.5, тогда как два других проекта классов зависимых библиотек были нацелены на .Net v4.5.2


44

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

Щелкните правой кнопкой мыши проект> Свойства> Приложение> Целевой .NET Framework

Убедитесь, что оба (или все) ваши проекты используют одну и ту же версию .NET Framework.


Отлично, сработало для меня! У меня был проект MVC с .NET Framework 4.5.2. И мои библиотеки классов, которые ссылаются на него, были .NET Framework 4.7.
Майк Апджон,

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

39
  1. Убедитесь, что все версии одинаковы для каждого проекта, щелкните каждый проект и просмотрите версию здесь. Project> Properties> Application> Target .NET framework.

  2. а. Выберите Инструменты> Диспетчер пакетов Nuget> Тип консоли диспетчера пакетов. Update-Package -Reinstall (если не работает, перейдите к 2.b )

    б. ЭТО КРИТИЧНО, НО САМАЯ БОЛЬШАЯ ВОЗМОЖНОСТЬ, КОТОРАЯ БУДЕТ РАБОТАТЬ . Удалите <Target> Возможно с несколькими строками </ Target>, обычно находящиеся в нижней части .csproj.

  3. Сохраните, загрузите и соберите решение.


1
Спасибо за это, хорошее сообщение об ошибке в Visual Studio о версиях .Net здесь не сбивается с пути!
Colmde

1
Интересно, если вы очистите решение, в окне вывода появится следующее сообщение: «Пакет был восстановлен с использованием .NetFramework XXX вместо целевой платформы .NetFramework XXX. Возможно, пакет не полностью совместим с вашим проектом »
elszeus

1
Часть 2.b, которая не была отмечена в других ответах, была для меня критической! 2.b Удалите <Target> Возможно с несколькими строками </ Target>, обычно находящиеся в нижней части .csproj.
Шелбиперейра

1
Часть 2.b абсолютно безумна, но работает! спасибо
Эло

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 ==> enabledRuntime version = "v4.0" Project ==> supportRuntime version = "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 (платные).

Весь проект References был «жёлтым», он выглядел ужасно и страшно.

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

«В основном» - потому что сообщения об ошибке «все вокруг красные» о том, что «элемент нигде не определен» иногда случаются. Это странно и приносит неудобства, но я все еще могу скомпилировать и запустить проект (ы): просто нужно очистить решение, перезапустить Visual Studio, немного помолиться, почистить снова, удалить папки obj / bin, перезапустить снова, и это работает хорошо.

Ключевым моментом является удаление не доступных ссылок на библиотеки , так как сообщения об ошибках говорят совсем о другом. (Например, что-то вроде «Xamarin.Build.Download.XamarinDownloadArchives не найден или не может найти что-то» и т. Д., Но это может означать, что у вас нет доступных ссылок.

Затем удалите папку пакетов, перезагрузите / заново откройте проект / решение, перейдите в «Управление пакетами Nuget» и нажмите кнопку «Восстановить».


1

Используя Visual Studio 2019 со всеми проектами, ориентированными на .Net Core 3.1, было решено:

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

0

Я также столкнулся с той же проблемой, но мой случай немного отличался от описанного выше. Я пытался открыть проект, созданный на другом компьютере. Я обнаружил, что путь к папке пакета не обновляется, когда вы добавляете ссылку, поэтому перезапуск VS, изменение версии .NET или любая упомянутая рекомендация не решают проблему. Я открыл файл csproj в notepad ++ и исправил все относительные пути к папке пакетов. Затем; все предупреждения ушли. Надеюсь, поможет.



0

Спасибо всем за помощь. Вот пример того, как я исправил свою проблему:

Щелкните правой кнопкой мыши по вашему проекту> Свойства

Под Приложением измените целевой Framework. В моем случае ImageSharp использовал .Net 4.6.1. Вы можете найти это в ваших packages.config.

Перейти к ссылкам вашего проекта. Вы заметите, что у SixLabors есть желтый треугольник. Вы должны обновить пакет NuGet.

Щелкните правой кнопкой мыши на References> Управление пакетами NuGet.

Обновите SixLabors.

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

Конвертировать ImageSharp.Image в ImageSharp.PixelFormats.Rgba32?


0

В Visual Studio 2019 одним из моих целевых каркасов проектов было ядро ​​.net, но оно ссылалось на другой проект, целевой платформой которого был стандарт .net. Я изменил все проекты, ссылаясь на стандарт .net, и значки исчезли. Чтобы увидеть, что представляет собой ваш проект, щелкните его правой кнопкой мыши, выберите «Свойства» и посмотрите на целевую платформу. Вы также можете нормально щелкнуть сам проект и посмотреть тег <TargetFramework> в <PropertyGroup>


0

В многопроектном решении, если все остальное не удалось ... В проекте запуска, проверьте. Зависимости-> Сборки и посмотрите, есть ли ошибочный проект, на который есть ссылка. Удалите это и восстановите.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.