Dre*_*kes 105 .net assemblies circular-reference base-class-library
在.NET BCL中有以下循环引用:
System.dll 和 System.Xml.dllSystem.dll 和 System.Configuration.dllSystem.Xml.dll 和 System.Configuration.dll这是.NET Reflector的截图,显示了我的意思:

微软如何创建这些程序集对我来说是一个谜.是否需要特殊的编译过程才允许这样做?我想象这里有一些有趣的东西.
Dyk*_*kam 57
我只能告诉Mono Project如何做到这一点.这个定理很简单,虽然它会给代码带来麻烦.
他们首先编译System.Configuration.dll,而不需要引用System.Xml.dll.在此之后,他们以正常方式编译System.Xml.dll.现在来了魔术.他们重新编译System.configuration.dll,该部分需要引用System.Xml.dll.现在有一个圆形引用的成功编译.
简而言之:
Srd*_*cic 35
RBarryYoung和Dykam正在做点什么.Microsoft使用内部工具使用ILDASM来反汇编程序集,删除所有内部/私有内容和方法主体,并再次将IL重新编译(使用ILASM)到所谓的"脱水程序集"或元数据程序集中.每次更改装配的公共接口时都会执行此操作.
在构建期间,使用元数据程序集而不是实际程序集.这样循环就被打破了.
Alf*_*ers 26
它可以按照Dykam描述的方式完成,但Visual Studio会阻止您这样做.
您必须直接使用命令行编译器csc.exe.
csc/target:库ClassA.cs
csc/target:library ClassB.cs /reference:ClassA.dll
csc/target:library ClassA.cs ClassC.cs /reference:ClassB.dll
//ClassA.cs
namespace CircularA {
public class ClassA {
}
}
//ClassB.cs
using CircularA;
namespace CircularB {
public class ClassB : ClassA {
}
}
//ClassC.cs
namespace CircularA {
class ClassC : ClassB {
}
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*esH 17
只要你不使用项目引用,它在Visual Studio中就很容易了...试试这个:
所以你就是这样做的.但是说真的......难道你不是在真正的项目中做到这一点!如果你这样做,圣诞老人今年不会带给你任何礼物.
| 归档时间: |
|
| 查看次数: |
10148 次 |
| 最近记录: |