Произвольная ссылка на сборку завершается неудачно («Вам не хватает директивы using или ссылки на сборку?») - PullRequest
31 голосов
/ 29 апреля 2011

Мое приложение имеет набор из 3,5 и 4,0 целевых сборок.Я работаю над новой службой Windows, нацеленной на 4.0, и проект внезапно оказывается не в состоянии увидеть некоторые другие сборки в решении.Это означает, что при сборке все ссылки на эти определенные другие сборки приводят к следующей ошибке:

Тип или имя пространства имен '[X]' не существует в пространстве имен '[Y]' (выотсутствует ссылка на сборку?)

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

Одна из ошибочных ссылок относится к нашему Core.dll, который нацелен на 3.5.Недавно мы добавили CoreEx.dll, ориентированный на 4.0, с общим пространством имен между сборками.Новая служба может видеть CoreEx.dll, но не Core.dll ... то есть, когда я начинаю набирать using Core.Utilities... Intellisense обнаруживает меньший набор пространств имен из CoreEx.dll, но не отображает ничего, что появляется только в Core.dll,Я почти уверен, что решение было успешно построено после добавления этого, но это заметное недавнее изменение.

Еще одна недостоверная ссылка на наше ядро ​​Data.dll, которое содержит наборы данных и вещи Entity Framework.Этот был недавно перенесен в 4.0.Опять же, я почти уверен, что решение, созданное после переноса проекта, но стоит упомянуть.

Последней ошибочной ссылкой является сборка, которая использует пространство имен на один уровень выше от сервиса.Например, проблемный проект основан на пространстве имен ProductName.Component.ComponentService, и он не может видеть проект на основе пространства имен ProductName.Component.Этот был недавно создан вместе с проблемным проектом и также нацелен на 4.0.

Как вы можете видеть, не существует какой-либо рифмы или причины, по которой ссылки на сборку терпят неудачу ... и проблемный проектможет успешно ссылаться на некоторые других сборок в решении.Я пытался очистить, перестроить, перезапустить Visual Studio ... ничто не исправило это навсегда.Что может быть причиной этого?

Ответы [ 7 ]

60 голосов
/ 29 апреля 2011

Проверьте целевую платформу нового проекта и убедитесь, что он не нацелен на .NET 4 Client Profile.Если это так, измените его на обычный .NET 4

2 голосов
/ 08 июля 2014

Я добавлял проекты в решение, использующее .net 4.5.Проекты, которые я добавил, были по умолчанию 4.5.1.Это сделало 4,5 библиотеки несовместимыми с новыми проектами.Я вошел в свойства моих новых проектов и поставил им цель 4.5 вместо 4.5.1 по умолчанию.После того, как я это сделал, моё решение удалось построить.

1 голос
/ 29 апреля 2011

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

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

0 голосов
/ 28 февраля 2017

У меня была похожая проблема: ошибка ссылки на сборку («Вы пропустили директиву использования или ссылку на сборку?»), И VS intellisense дал мне возможность добавить использование, но в решении ссылка имела желтый значок и сборка не удалась.

Я решил эту проблему, просмотрев свойство проекта Target Framework и изменив версию .net на версию эталонного решения, и это решило все проблемы.

Примечание. Версии .net должны быть совместимы между проектами.

0 голосов
/ 22 июня 2016

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

0 голосов
/ 25 апреля 2014

Обратите внимание, что это может произойти, если вы измените пространство имен, но не изменили имя сборки в свойствах проекта.

0 голосов
/ 19 октября 2011

Это сработало для меня, когда я изменил целевой фреймворк на 4.0. Но это было не то решение, которое мы хотели. Мы хотели использовать VS 2010 Premium для нашего проекта, но не собирались использовать .net 4.0 ... Основной проект библиотеки классов (.net 2.0) ссылался на dll "system.web.abstractions.dll" ... Я добавил ссылку на эту dll в других проектах (.net 2.0), которая ссылается на основную библиотеку классов ... решение скомпилировано без проблем ... так может быть и с вашим решением для Visual Studio ...

Но все работает нормально, если мы используем VS 2008 professional ... нам не нужно обходиться стороной, и все работает как по волшебству ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...