Получение типов в mscorlib 2.0.5.0 (также известном как Silverlight mscorlib) через отражение?
-
09-09-2019 - |
Вопрос
Я пытаюсь добавить поддержку 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 :)