我想Silverlight的支持添加到我最喜欢的节目的langauge Nemerle。

Nemerle,上编写的程序,加载经由反射所有类型主要是在2个步骤

1-)使用Assembly.LoadFrom加载组件 2-)Usese Assembly.GetTypes()来获取类型

然后,在编译结束它发射解决类型与Reflection.Emit的。

此过程适用于所有组件包括除的Silverlight mscorlib程序的Silverlight的。

在C#这个失败:

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

但是这通过:

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

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

有一种方法了呢?

有帮助吗?

解决方案

假设你正在尝试反映了从标准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;

其他提示

您可以使用Silverlight的组装编译Nemerle然后你Nemerle Silverlight的顶部工作:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top