문제

내가 좋아하는 프로그래밍 Langauge Nemerle에 Silverlight 지원을 추가하려고합니다.

Nemerle은 편집 절차에서 주로 반사를 통해 모든 유형을 2 단계로로드합니다.

1-) Assembly를 사용합니다. Loadlfr에서 Load Assembly 2)) usese Assembly.getTypes () 유형을 얻으려면 getTypes ()

그런 다음 컴파일이 끝나면 반사 된 유형을 반사합니다.

이 절차는 Silverlight의 mscorlib을 제외한 Silverlight를 포함한 모든 어셈블리에 대해 작동합니다.

C#에서 이것은 실패합니다.

 var a = System.Reflection.Assembly.LoadFrom(@"c:\mscorlib.dll");

그러나 이것은 통과합니다.

var a = System.Reflection.Assembly.ReflectionOnlyLoadFrom(@"c:\mscorlib.dll"); 

후자의 BU, a.getTypes ()는 Sayin System.Object의 부모가 존재하지 않는 예외를 던졌습니다.

탈출구가 있습니까?

도움이 되었습니까?

해결책

표준 CLR에서 Silverlight의 Mscorlib를 반영하려고한다고 가정하면 CLR이 여러 버전의 MScorlib로드를 허용하지 않기 때문에 작동하지 않습니다. (아마도 이것은 핵심 유형의 해상도를 화나게 할 수 있기 때문일 것입니다).

해결 방법은 mono.cecil을 사용하여 유형을 검사하는 것입니다.http://mono-project.com/cecil. 이 라이브러리는 실제로 .NET의 반사보다 더 잘 수행되며 더 강력해야합니다.

시작할 수있는 코드는 다음과 같습니다.

AssemblyDefinition asm = AssemblyFactory.GetAssembly(@"C:\mscorlib.dll");

var types =
    from ModuleDefinition m in asm.Modules
    from TypeDefinition t in m.Types
    select t.Name;

다른 팁

Silverlight 어셈블리로 Nemerle을 컴파일 할 수 있으며 Nemerle이 Silverlight 위에서 작업 할 수 있습니다. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top