Получение типов в mscorlib 2.0.5.0 (также известном как Silverlight mscorlib) через отражение?

StackOverflow https://stackoverflow.com/questions/754983

Вопрос

Я пытаюсь добавить поддержку Silverlight в мой любимый язык программирования Nemerle.

Nemerle при компиляции загружает все типы посредством отражения в основном в два этапа.

1-) Использование сборки. Загрузить от загрузки сборки 2-) usese assembly.gettypes () для получения типов

Затем в конце компиляции он выдает разрешенные типы с помощью Reflection.Emit.

Эта процедура работает для всех сборок, включая Silverlight, за исключением mscorlib Silverlight.

В С# это не удается:

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

но это проходит:

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

Но в последнем случае a.GetTypes() выдает исключение, говорящее, что родительский элемент System.Object не существует.

Есть ли выход?

Это было полезно?

Решение

Предполагая, что вы пытаетесь использовать mscorlib Silverlight из стандартной среды CLR, это не сработает, поскольку среда CLR не позволяет загружать несколько версий mscorlib.(Возможно, это потому, что это может нарушить разрешение основных типов).

Обходной путь — использовать Mono.Cecil для проверки типов:http://mono-project.com/Сесил.Эта библиотека на самом деле работает лучше, чем Reflection .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;

Другие советы

Вы можете скомпилировать Nemerle с помощью сборки Silverlight, и тогда Nemerle будет работать поверх Silverlight :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top