silverlight - 通过反射获取 mscorlib 2.0.5.0(又名 Silverlight mscorlib)中的类型?

标签 silverlight reflection.emit nemerle mscorlib assembly.reflectiononly

我正在尝试将 Silverlight 支持添加到我最喜欢的编程语言 Nemerle。

Nemerle ,在编译过程中,主要分两步通过反射加载所有类型

1-) 使用 Assembly.LoadFrom 加载程序集
2-) 使用 Assembly.GetTypes() 获取类型

然后在编译结束时,它使用 Reflection.Emit 发出解析后的类型。

此过程适用于所有程序集,包括 Silverlight 程序集,但 Silverlight 的 mscorlib 除外。

在 C# 中,这失败了:

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

但这通过了:
var a = System.Reflection.Assembly.ReflectionOnlyLoadFrom(@"c:\mscorlib.dll"); 

在后者中, a.GetTypes() 抛出异常,说 System.Object 的父级不存在。

有出路吗 ?

最佳答案

假设您试图从标准 CLR 反射(reflect) Silverlight 的 mscorlib,这将不起作用,因为 CLR 不允许加载多个版本的 mscorlib。 (也许这是因为它可能会破坏其核心类型的分辨率)。

一种解决方法是使用 Mono.Cecil 检查类型:
http://mono-project.com/Cecil .这个库实际上比 .NET 的 Reflection 执行得更好,并且应该更强大。

下面是一些帮助您入门的代码:

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 - 通过反射获取 mscorlib 2.0.5.0(又名 Silverlight mscorlib)中的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/754983/

相关文章:

c# - 在 Reflection.Emit 中使用发射类型作为类型参数

.net - .NET 3.5 安装程序中是否包含 .NET 2.0?

wpf - 在 Nemerle 中构建 WPF/XAML 应用程序

c# - 通过 C# 的动态 XAML

c# - 如何获取 Web 应用程序的站点名称?

Silverlight - 在列表框上停止高亮显示

c# - wp7 芒果中的 DataTemplateSelector

c# - 如何访问动态程序集中的匿名字段?

c# - 动态类型影子基类的属性并使用 Reflection.Emit 设置为 protected

c# - 如何取消绑定(bind)ObjectDataSource?