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

And*_*ock 2 .net ilmerge

ILMerge做什么?

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

我是从以下角度问:

  • 当我合并具有InternalsVisibleTo彼此属性的程序集时会发生什么?
  • 如果我从完全限定的程序集名称中进行字符串反射,会发生什么

谢谢

Jar*_*Par 7

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

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

我不确定你的反思和完全合格的装配名称是什么意思.但似乎有两种我能想到的情况

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