为什么我必须链接参考组件?

我的项目引用了一个引用另一个程序集的程序集(将其称为X)(将其称为Y)。

当我尝试编译我的项目时,它要求它应该引用程序集Y.为什么会这样? 我在引用程序集X的行上收到以下错误:

“DevExpress.XtraEditors.XtraForm”类型在未引用的程序集中定义。 您必须添加对程序集’DevExpress.Utils.v9.1,Version = 9.1.2.0,Culture = neutral,PublicKeyToken = b88d1754d700e49a’的引用。

DevExpress.XtraEditors.XtraForm是程序集Y.

为什么是这样? 我以前没见过这种行为。

这一直都存在。 如果您正在使用从程序集Y获取方法/属性/成员等的对象,则只能在编译时获取这些内容。

原因是.NET不能依赖程序集X来确保它能够获得正确的符号和元数据信息。

这一直是行为,如果编译器没有对所有依赖项的引用,编译器将如何构建项目?

应用程序需要项目引用的程序集才能运行。 您正在使用这些程序集中的类型,而没有这些类型的应用程序无法构建。 更重要的是,没有这些类型,您的应用程序无法运行。

现在考虑您引用的每个程序集都以与程序集相同的方式构建,并要求所有引用的程序集都存在并进行说明。 这确实会产生令人讨厌的连锁反应,但最终结果是,一旦执行应用程序,CLR就会拥有运行应用程序所需的所有程序集。