Подтвердить что ты не робот

Ошибка отладки "Тип" xx "определяется в сборке, на которую не ссылаются"

Полная ошибка следующая:

Тип "System.Windows.Forms.Control" - определенных в сборке, которая не является ссылки. Вы должны добавить ссылку к сборке 'System.Windows.Forms, Версия = 2.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089'.

и он указывает на самый первый оператор (строка Debug.Assert) в первом классе в проекте библиотеки, который не нуждается в System.Windows.Forms (или так я думал). Я знаю, как его решить: добавьте упомянутую ссылку. Но как узнать, какая библиотека вызывает эту ошибку, или лучше, какую часть триггеров кода использует библиотека WinForms?

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


EDIT: альтернативное решение

Эти или подобные проблемы также могут быть решены с помощью Binding Log Viewer Fuslogvw.exe из Microsoft Framework Tools. Он показывает все попытки и успехи узлов, к которым ваше приложение привязывается.

4b9b3361

Ответ 1

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

Я думаю, что происходит ссылка на библиотеку, которая имеет общедоступный метод или свойство, которое возвращает System.Windows.Forms.Control или принимает один параметр. Неважно, действительно ли вы вызываете этот метод/свойство, тот факт, что он общедоступен, означает, что ваш собственный код должен иметь возможность разрешать все типы, используемые библиотекой. Если библиотека использовала System.Windows.Forms только внутри, вы бы не испытывали этого.

Это также означает, что просто просмотр зависимостей сборок, в которых вы зависите, может просто сузить список подозреваемых, поскольку могут быть некоторые сборки, которые зависят от System.Windows.Forms внутренне (без проблем) и один вызывающая сбои, которая имеет общедоступный параметр/возвращаемое значение типа из сборки SWForms.

Мое предложение - вы просто создали пустой проект без ссылки на S.W.Forms, затем по очереди добавляете каждую из своих зависимостей и пытаетесь скомпилировать их после каждого.

Ответ 2

У меня была такая же ошибка.

Проблема заключалась в том, что я использовал ссылку на проект, который использует System.Windows.Forms внутри.

Решение должно добавить ссылку на System.Windows.Forms также в вашем проекте.

Ответ 3

Используйте что-то вроде NDepend или Reflector или Browser Object, чтобы проверить зависимости зависимых узлов.

Я не могу думать о другом способе, описанном выше.