2009-11-22 36 views
0

是否有可能建立自定义mscorlib.dll没有任何使用本机代码(pinvoke allowed :-)?自定义mscorlib.dll没有本地代码

我尝试做一些实验本周末看到这将是多么难做到这一点,就以下几个问题:

  1. 我添加了一个类System.Static到我的版本的mscorlib却都TypeLoadException带有消息,它无法从'mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089加载类型'System.Static`1'。所以它似乎仍然在加载MS库。如何避免(我正在使用/ nostdlib开关)?
  2. 当我叫我的mscorlib“mycorlib”我有这样的System.Object的必须有一个父类
  3. 如果我有泛型类型T和我做new T()它是由C#compilator翻译成Activator.CrateInstance<T>()错误,这在MS实现通话RuntimeTypeHandle.CreateInstance(...)这是本地方法。我可以从我的mscorlib中调用它,还是将它包含在MS提供的mscorlib中?

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

可能吗?

+0

嘿!你终于找到了解决这个问题的方法吗?我目前正在努力做同样的:) http://lightnet.codeplex.com/ – 2010-09-16 07:36:16

+0

@Koistya纳文 - 不幸的是我失去了这场战斗。看起来像写自己的CLR是唯一的方法:-( – SeeR 2010-09-17 07:36:41

+0

@Tarkus你是如何得到这个?我想有一个精简的mscorlib插件开发人员代码反对 – mcintyre321 2012-04-13 13:19:38

回答

1

不,这是不可能的。 Corelib中的某些类型与MS.Net实现绑定在一起,以替换为托管代码。

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

其中一个例子就是字符串类。虽然它主要可以在托管环境中实现(请参阅单声道),但Intern()之类的内容不能简单而有意义地实施托管专用。在string的情况下(甚至是不可变的),你甚至会遇到构造函数的问题。