ILMerge实际上是合并程序集,还是只将所有内容放在一个文件中?

时间:2010-10-27 15:13:50

标签: .net ilmerge

ILMerge做了什么?

它是创建一个新程序集,还是只将多个程序集放入一个dll中?

我是从以下角度问:

  • 当我将具有InternalsVisibleTo属性的程序集合并到一起时会发生什么?
  • 如果我正在使用来自完全限定的程序集名称的字符串进行反射,会发生什么?

由于

1 个答案:

答案 0 :(得分:7)

我不确定你在合并程序集和将所有内容放在一个文件之间的区别。它的作用是采用一组.Net程序集并生成一个包含所有程序集的组合内容的程序集。

这对要合并的程序集的InternalsVisibleTo属性没有影响。运行时使用此属性来允许访问程序集之间的internal构造(否则这是非法的)。因为它们现在都在一个程序集中,但它们可以在不使用internal的情况下自由访问彼此的InternalsVisibleTo类型。简而言之,如果internal访问在合并之前有效,则在合并之后它将是有效的。

我不确定反射和完全限定的装配名称是什么意思。但似乎有两种我能想到的案例

  1. 在运行时抓取类型组合限定名称。这仍然可以正常工作,但您将获得合并的程序集名称而不是原始程序集名称
  2. 将类型的合格名称硬编码到项目中。如果在合并之前使用程序集名称,则会导致问题,因为该类型不再存在。