2009-11-22 64 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的情況下(甚至是不可變的),你甚至會遇到構造函數的問題。