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

Мой проект ссылается на сборку (назовем ее X), которая ссылается на другую сборку (назовет ее Y).

Когда я пытаюсь скомпилировать свой проект, он требует, чтобы он ссылался на сборку Y. Почему? Я получаю следующую ошибку в строке, где есть ссылка на сборку X:

Тип DevExpress.XtraEditors.XtraForm определен в сборке, на которую нет ссылок. Вы должны добавить ссылку на сборку DevExpress.Utils.v9.1, Version=9.1.2.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a.

DevExpress.XtraEditors.XtraForm — это сборка Y.

Почему это? Я не видел такого поведения раньше.


person AngryHacker    schedule 10.04.2009    source источник


Ответы (2)


Это всегда было на месте. Вы получите их только во время компиляции, если используете объект, который получает методы/свойства/члены и т. д. из сборки Y.

Причина в том, что .NET не может полагаться на сборку X, чтобы гарантировать, что он сможет получить надлежащую информацию о символах и метаданных.

person Chad Moran    schedule 10.04.2009
comment
Я не думаю, что так было всегда. Я портировал проект с .net1.1 на .net3.5 и появилась эта проблема. Если то, что вы говорите, верно, то в проекте A ссылка на сборку B, которая ссылается на сборку C, которая ссылается на сборку D, мой проект A должен ссылаться на сборки B, C и D. Не имеет смысла - person AngryHacker; 10.04.2009

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

Сборки, на которые ссылается ваш проект, необходимы для работы вашего приложения. Вы используете типы из этих сборок, и без этих типов ваше приложение не может быть построено. Что еще более важно, без этих типов ваше приложение не может работать.

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

person Andrew Hare    schedule 10.04.2009