在编译代码上添加引用有什么影响?

时间:2011-09-19 10:31:48

标签: .net compilation assemblies ildasm

当我添加对.dll文件的引用时,项目的编译输出会发生什么变化?

(想象一下,我添加了一个引用并重建。)

2 个答案:

答案 0 :(得分:2)

清单将记录对.dll文件的引用 - 如果未使用,编译器将删除已编译清单中的引用。所以,在这种情况下,没有影响。

如果您在此库中定义了任何扩展方法,以便为现有(未修改)代码提供更好的匹配,则构成此库的使用,并将使用扩展方法。

如果这不是.NET程序集,而是com / com + dll,也会生成包装器。

关于编译程序集的MSIL部分,其他任何内容都不应该改变。

答案 1 :(得分:2)

如果只是一个引用(假设dll是一个程序集) - 没有任何一个;编译器会静默删除未使用的引用,并且在您的方案中,您没有添加使用程序集的任何代码(即使用新dll中的类型的某些代码)。注意我在这里做了轻微的假设,新dll中没有扩展方法(在已经使用的名称空间中),它们为现有的扩展方法使用提供了更好的匹配。

如果你已经标记了对Copy Local = True的引用,那么在你的输出目录中你会得到额外的dll(但是你的程序集内部正式引用它 - 该引用仍然被删除如果您的代码没有触及装配体。)