C#:生成后在程序集清单中声明哪些DLL

本文关键字:声明 DLL 程序集清单 | 更新日期: 2023-09-27 18:19:40

当我构建一个引用许多项目的C#项目时,我会在输出中获得我的dll。我用DotPeek打开它查看它的参考资料,我发现有些项目的参考资料不在那里。

我的问题是:编译器如何决定将引用放入程序集中?

C#:生成后在程序集清单中声明哪些DLL

在编译a时,有几种情况下从项目a到项目B的引用被删除:

  1. 你提到了B,但你没有以任何方式使用B中的任何内容
  2. 您引用了B,只在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;
     }
}