当我构建一个引用很多项目的C#项目时,我会在输出中输入我的dll。 我用DotPeek打开它以查看它的引用,我得到一些项目引用不在那里。
我的问题是:编译器如何决定将引用放在程序集中?
答案 0 :(得分:4)
有些情况下,在编译A时,项目A到项目B的引用被删除:
在第一种情况下,参考证明是不必要的,因此它不会被编译成A。
在第二种情况下,常量值被编译为A而不是B中对常量的引用,因此现在不需要对B的引用,因此它不会被编译为A.
如果您创建了两个项目A和B,以及A中的参考B,并添加以下类型:
namespace A
{
public class AClass
{
public int Field = B.BClass.Constant;
}
}
namespace B
{
public class BClass
{
public const int Constant = 42;
}
}
然后编译它并反汇编A程序集,你将看到没有对B的引用的跟踪,并且A.AClass的编译代码如下所示:
namespace A
{
public class AClass
{
public int Field = 42;
}
}