如何创建自定义.NET基类库(BCL)又名mscorlib替换?

时间:2010-09-15 10:42:20

标签: c# .net clr class-library mscorlib

有人知道如何使用库存BCL进行自定义CLR工作吗?如何发现现有CLR和BCL之间最重要的联系并重用它们?

以下是我目前的情况:http://lightnet.codeplex.com

4 个答案:

答案 0 :(得分:6)

  • 查看Script#,这是一个工具链,用于将C#编译为由Microsoft工作人员编写的Javascript,并在内部用于部分Web应用程序。这个人通过使用/ nostdlib进行编译并引用他最低限度重新实现的BCL来实现它。生成程序集后,工具会通过它反射并将其转换为Javascript。他使用重新实现的BCL来实现准确的调试,并防止您使用在Javascript上下文中没有意义的BCL功能。它看起来与您的代码现在非常相似,包括大多数类本身都是空的或只有一些空方法的事实。这是因为BCL的类/方法的实现是用Javascript代替的。

  • 这可能是一个专利雷区。我从最近的甲骨文诉讼中了解到这一点:如果你实施BCL规范,你只会受到社群承诺的约束(尽管与Java不同,你不需要同时实施CLR。是的,微软的专利豁免更多自由主义而不是Java的)。我认为这是一个很棒的想法,可以在很多情况下使用;我可以想象自己使用这个而不是DSL,或者不是嵌入脚本语言,而是在我的插件架构中迂回担心代码安全性。但从微软的角度考虑一下 - 如果他们允许对不合规的BCL进行专利豁免,那么阻止某人将其专有产品称为“不合规的BCL实施”并获得豁免的是什么呢?

答案 1 :(得分:5)

鉴于这些评论,听起来您希望将股票CLR与自定义BCL一起使用。

高度怀疑这会奏效。 CLR和BCL之间可能会有很多关系 - 他们会做出一定的实施期望,并依赖它们,而不是不合理。例如,CLR可能依赖于您不了解的某些内部类型。

如果你设法让股票CLR与你自己的BCL实现一起工作,我会感到非常惊讶,虽然实现自定义BCL以使用Mono运行时可能会非常简单 - 至少在那里你可以调试什么是如果你遇到问题就继续。

答案 2 :(得分:1)

希望这不是我正在挖掘的一个古老的线索,但我看不到一年;假设它是从一个月或两个月前(大约9月10日)......

无论如何,除了学术目的,这对我来说听起来毫无用处,只是玩得开心/学习。我怀疑它会失败,除非你使用反编译器看看BCL的内部接口是什么样的,并确保你的实现符合默认的CLR期望;或者,查看Mono实现。

我认为这对于实际目的来说没用,因为微软的.NET BCL是一个非常强大的实现,我怀疑一个人或一个小团队可以做得更好。需要轻量级?这就是.NET CE运行时的用途,并且适用于小型设备。有人还提到了.NET MF(Micro Framework);如果这个名字是正义的,那就是一个轻量级的MF'er。 :)

我认为实际使用的唯一方法是,如果你完全重新实现CLR / CLI / CLS(以及好的,“CL-everything”)并自己创建。某些其他平台的.NET实现。

编辑:注意,如果您使用.NET的任何其他部分,则使用标准BCL;所以你不会摆脱它,它仍然是需要的。如果您尝试在不存在标准.NET实现的平台上运行此操作,那就太糟糕了,但我不认为这就是您正在做的...

答案 3 :(得分:0)

即使您可以编写自己的BCL,如何使用其他任何代码?所有这些代码都是针对实际的BCL构建的,并且期望在BCL程序集中使用强名称。