Microsoft如何创建具有循环引用的程序集?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (69)

在.NET BCL中有以下几种循环引用:

  • System.dllSystem.Xml.dll
  • System.dllSystem.Configuration.dll
  • System.Xml.dllSystem.Configuration.dll

下面是.NET Reflector的屏幕截图,显示了我的意思:

微软如何创建这些程序集对我来说是个谜。是否需要特殊的编译过程才能实现?我想象一些有趣的事情在这里发生。

提问于
用户回答回答于

我只能说出Mono Project如何做到这一点。这个定理很简单,尽管它给代码弄得一团糟。

他们首先编译System.Configuration.dll,而不需要引用System.Xml.dll的部分。之后,他们以正常的方式编译System.Xml.dll。现在来了魔法。他们重新编译System.configuration.dll,其中需要引用System.Xml.dll的部分。现在有一个成功的循环引用编译。

简而言之:

  • A编译时不需要代码B和对B的引用。
  • B被编译。
  • A被重新编译。
用户回答回答于

RBarryYoung和Dykam正在进行一些工作。Microsoft使用内部工具使用ILDASM来反汇编程序集,去除所有内部/私有的东西和方法体,并重新编译IL(使用ILASM)进入所谓的“脱水程序集”或元数据程序集。每当组装的公共接口发生改变时都会执行此操作。

在构建期间,使用元数据程序集而不是真正的程序集。这种方式周期被打破。

所属标签

可能回答问题的人

  • 华讯云

    0 粉丝0 提问7 回答
  • gulu丶咕噜

    0 粉丝1 提问5 回答
  • 卓脑域名

    0 粉丝0 提问5 回答
  • 女淘日记

    杭州吱吱吱科技 · 站长 (已认证)

    1 粉丝1 提问3 回答

扫码关注云+社区

领取腾讯云代金券