我正在尝试将Silverlight支持添加到我最喜欢的编程语言Nemerle中。
Nemerle,在编译过程中,主要分两步通过反射加载所有类型
1-)使用Assembly.LoadFrom加载程序集2-)使用Assembly.GetTypes()获取类型
然后,在编译结束时,它使用Reflection.Emit发出已解析的类型。
此过程适用于所有程序集,包括silverlight程序集( Silverlight程序集除外)。
在c#中,这将失败:
var a = System.Reflection.Assembly.LoadFrom(@"c:\mscorlib.dll");但这已经过去了:
var a = System.Reflection.Assembly.ReflectionOnlyLoadFrom(@"c:\mscorlib.dll"); 但是在后一种情况下,a.GetTypes()在System.Object的父对象不存在时抛出异常。
有没有出路?
发布于 2009-04-21 13:44:19
假设您试图从标准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;发布于 2011-03-08 17:23:40
你可以用Silverlight程序集编译Nemerle,然后你就可以在Silverlight上工作了:)
https://stackoverflow.com/questions/754983
复制相似问题