0

ネイティブ コードを使用せずにカスタム mscorlib.dll をビルドすることは可能ですか (pinvoke は許可されています :-)?

今週末、それがどれほど難しいかを確認するために少し実験を試みましたが、次の問題がありました。

  1. mscorlib のバージョンに System.Static クラスを 1 つ追加しましたが、タイプ 'System.Static`1' を 'mscorlib、Version=2.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089 から読み込めない' というメッセージとともに TypeLoadException が発生しました。 . どういうわけか、まだMSライブラリをロードしているようです。それを回避するにはどうすればよいですか (既に /nostdlib スイッチを使用しています)。
  2. mscorlib に「mycorlib」という名前を付けたとき、System.Object には親クラスが必要であるというエラーが発生しました
  3. 私がジェネリック型 T を持っていて、それを実行している場合、ネイティブ メソッドであるMS 実装呼び出しnew T()の c# コンパイラによって変換されます。mscorlib から呼び出すことはできますか、それとも MS が提供する mscorlib に含まれていますか?Activator.CrateInstance<T>()RuntimeTypeHandle.CreateInstance(...)

私の目標は、int、double、string、およびその他の標準型のバージョンを作成できるかどうかをテストすることでした。MS CLR を使用したいのですが、マネージ コード クラスを提供するだけです。

出来ますか?

4

1 に答える 1

1

いいえ、できません。corelib の一部の型は、MS.Net 実装に結び付けられすぎているため、マネージ コードで置き換えることができません。

モノランタイムでそれを試すことができます。しかし、その場合でも、一部の (ごく少数ではありますが) メソッドは純粋に管理されたコードでは実装できない (またはオーバーヘッドが非常に大きい) ことがわかります。

この一例は、文字列クラスです。ほとんどの場合、マネージ (mono を参照) で実装できますが、マネージIntern()のみで単純かつ意味のある実装を行うことはできません。また、文字列の場合、コンストラクターで問題が発生することもあります (これは定義ごとに不変です!)。

于 2009-11-22T17:33:31.367 に答える