2009-11-22 2 views
0

네이티브 코드 (pinvoke allowed :-)를 사용하지 않고 사용자 지정 mscorlib.dll을 빌드 할 수 있습니까?네이티브 코드가없는 사용자 지정 mscorlib.dll

나는 약간의 실험에게 그것을 수행하는 것이 얼마나 어려운 볼이 주말을 시도하고 다음과 같은 문제점이 있었다 : 나는 mscorlib에 내 버전으로 하나 개의 클래스 System.Static을 추가 한

  1. 을하지만했다 TypeLoadException 'mscorlib, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089'에서 'System.Static`1'형식을로드 할 수 없다는 메시지가 있습니다. 그래서 그것은 어떻게 든 MS 라이브러리를로드하는 것 같습니다. 그것을 피하는 방법 (나는/nostdlib 스위치를 이미 사용하고 있습니까?). 내가 이름을 때
  2. 내 mscorlib에 'mycorlib은'나는 내가이 Activator.CrateInstance<T>()에 C#을 compilator 번역 것 new T()을하고있어 제네릭 형식 T가 있으면하는 System.Object가 부모 클래스
  3. 이 있어야 오류가 있던 MS 구현 통화에서 RuntimeTypeHandle.CreateInstance(...)은 원시 메소드입니다. 내 mscorlib에서 호출 할 수 있습니까? 아니면 MS에서 제공 한 mscorlib에 포함되어 있습니까?

내 목표는 int, double, string 및 기타 표준 유형의 내 버전을 작성할 가능성을 테스트하는 것이 었습니다. MS CLR을 사용하고 싶지만 관리 코드 클래스 만 제공하면됩니다.

가능합니까?

+0

안녕하세요! 마침내이 문제에 대한 해결책을 찾았습니까? 나는 현재 같은 일을하려고 애 쓰고있다. http://lightnet.codeplex.com/ –

+0

@Koistya Navin - 불행히도 나는이 전투에서졌다. 자신의 CLR을 작성하는 것만이 유일한 방법입니다 :-( – SeeR

+0

@Tarkus 어떻게이 일을 시작 했습니까? 플러그인 개발자가 mscorlib을 사용하여 코드를 작성하고 싶습니다. – mcintyre321

답변

1

불가능합니다. corelib의 일부 유형은 관리 코드로 대체되기 위해 MS.Net 구현에 너무 묶여 있습니다.

모노 런타임으로 시도 할 수 있습니다. 그러나 그때조차도 일부 (비록 극소수 임에도 불구하고) 메소드가 순수하게 관리되는 코드로 구현 될 수 없다는 것을 알게 될 것입니다.

이 예는 문자열 클래스입니다. 대부분의 경우 관리되는 (모노를 참조하십시오) Intern() 같은 것들은 관리 전용으로 간단하고 의미있게 구현 될 수 없습니다. 또한 문자열의 경우 생성자에 문제가 생길 수도 있습니다 (이는 per-def 불변입니다).

관련 문제