首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过反射在mscorlib 2.0.5.0 (也就是Silverlight mscorlib)中获取类型?

通过反射在mscorlib 2.0.5.0 (也就是Silverlight mscorlib)中获取类型?
EN

Stack Overflow用户
提问于 2009-04-16 06:35:23
回答 2查看 1.6K关注 0票数 7

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

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

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

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

此过程适用于所有程序集,包括silverlight程序集( Silverlight程序集除外)。

在c#中,这将失败:

代码语言:javascript
复制
 var a = System.Reflection.Assembly.LoadFrom(@"c:\mscorlib.dll");

但这已经过去了:

代码语言:javascript
复制
var a = System.Reflection.Assembly.ReflectionOnlyLoadFrom(@"c:\mscorlib.dll"); 

但是在后一种情况下,a.GetTypes()在System.Object的父对象不存在时抛出异常。

有没有出路?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-21 13:44:19

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

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

下面是一些代码,可以帮助您入门:

代码语言:javascript
复制
AssemblyDefinition asm = AssemblyFactory.GetAssembly(@"C:\mscorlib.dll");

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

Stack Overflow用户

发布于 2011-03-08 17:23:40

你可以用Silverlight程序集编译Nemerle,然后你就可以在Silverlight上工作了:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/754983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档