0

是否可以在不使用本机代码的情况下构建自定义 mscorlib.dll(允许 pinvoke :-)?

这个周末我做了一个小实验,看看做起来有多难,并且遇到了以下问题:

  1. 我在我的 mscorlib 版本中添加了一个类 System.Static,但出现 TypeLoadException 并显示无法从“mscorlib”加载类型“System.Static`1”的消息,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089 . 因此,它似乎仍在以某种方式加载 MS 库。如何避免这种情况(我已经在使用 /nostdlib 开关)?
  2. 当我将我的 mscorlib 命名为“mycorlib”时,我遇到了 System.Object 必须有父类的错误
  3. 如果我有泛型类型 T 并且我正在这样做new T(),则它由 c# 编译器翻译Activator.CrateInstance<T>(),在 MS 实现中调用RuntimeTypeHandle.CreateInstance(...)它是本机方法。我可以从我的 mscorlib 中调用它还是它包含在 MS 提供的 mscorlib 中?

我的目标是测试编写我的 int、double、string 和其他标准类型版本的可能性。我想使用 MS CLR,但只提供我的托管代码类。

是否可以?

4

1 回答 1

1

不,这是不可能的。corelib 中的某些类型过于依赖于 MS.Net 实现而无法被托管代码替换。

您可以尝试使用单声道运行时。但即便如此,您也会发现某些(尽管很少)方法不能(或仅以巨大的开销)在纯托管代码中实现。

一个例子是字符串类。虽然它主要可以在托管(见单声道)中实现,Intern()但不能简单而有意义地实现只托管。此外,在字符串的情况下,您甚至会遇到构造函数的问题(这是 per-def 不可变的!)。

于 2009-11-22T17:33:31.367 回答