【发布时间】:2021-04-26 10:03:15
【问题描述】:
我有一个项目“A”,它引用了另外两个项目“B”和“C”。
对于这两个参考,这些项目中的实际功能都在“A”中使用。
但是当我用 ILSpy 打开程序集 A.dll 时,它在引用下只显示“B”而不是“C”。
如果我删除缺少的引用,我的项目将不再编译,因此它实际上已被实际使用。
这可能是什么原因?
【问题讨论】:
标签: .net-assembly ilspy
我有一个项目“A”,它引用了另外两个项目“B”和“C”。
对于这两个参考,这些项目中的实际功能都在“A”中使用。
但是当我用 ILSpy 打开程序集 A.dll 时,它在引用下只显示“B”而不是“C”。
如果我删除缺少的引用,我的项目将不再编译,因此它实际上已被实际使用。
这可能是什么原因?
【问题讨论】:
标签: .net-assembly ilspy
.dll 仅在使用来自被引用程序集的类型时才包含程序集引用。 在编译时,您可能需要一些额外的程序集。
例子:
C.dll:
class C { public void M1() {} }
B.dll:
class B : C { public void M2() {} }
A.dll:
class A {
public static void Main() {
new B().M2();
}
}
在构建A.dll 时,编译器将同时需要B.dll 和C.dll,以便它可以列出B 类型中的所有方法。
然而,生成的 IL 代码只会引用类 B 和方法 B.M2,因此编译器不需要发出对 C.dll 的程序集引用。
【讨论】: